-
Notifications
You must be signed in to change notification settings - Fork 50
Q: Is it safe to mess with option 'cpp11_preserve_xptr'? #268
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
I would say the danger is limited as it's only retrieved once per translation unit (because I certainly would not advise to change the option, but unfortunately there are not many allowed places where we can keep the external pointer. |
Instead of an option, maybe it can belong to an environment in the search path, e.g. similar to In an environment, it could perhaps be better protected. |
I think it should be preserved in the namespace of the embedding package. This way all preserved objects are dominated by the package's namespace, making it much easier to debug leaks through tools like https://github.com/r-lib/memtools. Currently, the potentially leaking objects (not potentially in the case of lobstr, where there are actual leaks) are stored in a flat linked list in the precious list, making it hard to figure out what package is responsible for this memory. I discussed this with Jim at one point, he said this setup should work for cpp11. |
Hi, thanks for the followup(s). My main use case that I thought of was situations like: with_options({
# something that triggers 'cpp11_preserve_xptr' to be set
...
}) which effectively will do |
For package use the cpp11 namespace won't exist, so the namespace of the package using cpp11 is probably the best option as Lionel suggested. If you are using |
While trying to troubleshoot some segfaults, I stumbled upon the R option
cpp11_preserve_xptr
that cpp11 uses internally;cpp11/inst/include/cpp11/protect.hpp
Lines 380 to 405 in 9a62c3a
To be clear, I have no idea what it does, but looking at it's value, e.g.
is see it's an external pointer.
My question is, is the cpp11 code robust to anything that messes with this option? For example, can it safely be unset:
at any time? Can you imagine a scenario where changing it's value would wreak havoc?
The text was updated successfully, but these errors were encountered: