Bug #19773
closedIntermittent SIGSEGV during marking of Ripper parser
Description
Intermittent SIGSEGV during marking of the Ripper parser. A failing build can be seen on ci.rvm.jp (build 4643684).
Inside ripper_s_allocate first we use TypedData_Make_Struct to create a new T_DATA object in the Ruby heap. This allocates an empty struct (struct ripper). Further down the function we allocate another struct (struct parser_params during rb_ruby_ripper_parser_allcoate) and assign it to a pointer from the first struct, which is attached to the T_DATA object.
rb_ruby_ripper_parser_allocate can trigger GC, as it uses ruby_xcalloc. But if GC is triggered at this point then the parser_params have not been allocated yet, and so the struct ripper contains a NULL reference.
This causes a SEGV when we try and mark the T_DATA wrapper around the struct ripper.
This can be replicated locally using the following test script
require "ripper"
GC.stress = true
Ripper.new
Updated by eightbitraptor (Matt V-H) over 2 years ago
- Description updated (diff)
Updated by eightbitraptor (Matt V-H) over 2 years ago
Updated by eightbitraptor (Matt V-H) over 2 years ago
- Status changed from Open to Closed