Preserve data handed to callbacks with pointer_from_objref #113
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.
Currently,
pointer_from_objref
is used in a way that does not strictly guarantee that that object will still be alive by the time it is used on in C. This PR introduces a_preserved_pointer_from_objref
variant that pushes the object to a globalIdSet
to make sure the data remains referenced in Julia.Note: I am currently clearing the dict at the bottom of the solve function. However, the chosen design with a global dict may leak memory if the constructors that call into
_preserved_ponter_from_objref
are called outside of the context ofsolve_mcp
. So an alternative design may be preferred where the_preserved_context
is handed explicitly to the functions doing the pointer conversion. This PR follows the discussion on slack:https://julialang.slack.com/archives/C688QKS7Q/p1714149796226809