Skip to content
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

Fix premature GC issues in several constructors. #51

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

jzakrzew
Copy link

Several constructors would store pointers to newly allocated ruby objects inside an unwrapped C struct on the heap.
This, coupled with optimizing compilers, made it possible that these objects were not visible to the GC in the mark phase and prematurely collected, resulting in dangling pointers, crashes due to segfaults, etc.

These changes aim to make sure that the objects will be always visible to the GC, by storing pointers to them in local variables protected by RB_GC_GUARD.

I believe these problems are responsible for PR #49 failing the CI build.

Several constructors would store pointers to newly allocated ruby objects inside an unwrapped C struct on the heap.
This, coupled with optimizing compilers, made it possible that these objects were not visible to the GC in the mark phase and prematurely collected, resulting in dangling pointers, crashes due to segfaults, etc.

These changes aim to make sure that the objects will be always visible to the GC, by storing pointers to them in local variables protected by RB_GC_GUARD.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant