Fix recursive use of an object in WASM32 #90
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This addresses kaspanet#516
It appears that holding a
Cast
toJsValue
can result in "out of order" drop that dropsJsValue
before the cast, causing multiple borrow access to the internal data of the givenJsValue
(Cast
holds aRef
whileJsValue::drop()
requiresborrow_mut()
, causing a borrow panic.I have converted
try_cast_from()
calls totry_owned_from()
which is equivalent totry_cast_from()?.into_owned()
making theCast
"transient" in nature (thus dropping theRef
immediately). This appears to have solved the issue.Not yet sure what the correct approach would be to prevent this. Technically, this should be handled via lifetimes making
Cast
carry the lifetime of the supplied&JsValue
, but not quite sure this is possible, need to experiment to see if the lifetime can be introduced and propagated. An alternative approach would be to have aCast
clone and then own a sourceJsValue
so that theJsValue
used to access the ABI cell is isolated and its drop is synchronized with theCast
itself.