diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2017-10-03 17:28:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-03 17:28:49 -0700 |
commit | cd5f49d0942e19a5854a325941918fca02fdb409 (patch) | |
tree | e4fde8a62907668dbada9c3332f181faf375c645 /ruby/ext/google/protobuf_c/protobuf.h | |
parent | d6c32a818fd8590e1758d1ed86107a967468d1b6 (diff) | |
download | protobuf-cd5f49d0942e19a5854a325941918fca02fdb409.tar.gz protobuf-cd5f49d0942e19a5854a325941918fca02fdb409.tar.bz2 protobuf-cd5f49d0942e19a5854a325941918fca02fdb409.zip |
Fix ruby segment fault (#3708)
* Fix ruby segment fault
1) rb_ary_new cannot be called during allocate function. During allocate
fucntion, the containing object hasn't been marked and rb_ary_new may
invoke gc to collect containing object.
2) The global map should be marked before allocating it. Otherwise it
may be garbage collected.
* Add test
* Remove commented code
* Fix grammer error
Diffstat (limited to 'ruby/ext/google/protobuf_c/protobuf.h')
-rw-r--r-- | ruby/ext/google/protobuf_c/protobuf.h | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/ruby/ext/google/protobuf_c/protobuf.h b/ruby/ext/google/protobuf_c/protobuf.h index f4b110fe..21c7f001 100644 --- a/ruby/ext/google/protobuf_c/protobuf.h +++ b/ruby/ext/google/protobuf_c/protobuf.h @@ -116,10 +116,6 @@ struct Descriptor { const upb_handlers* pb_serialize_handlers; const upb_handlers* json_serialize_handlers; const upb_handlers* json_serialize_handlers_preserve; - // Handlers hold type class references for sub-message fields directly in some - // cases. We need to keep these rooted because they might otherwise be - // collected. - VALUE typeclass_references; }; struct FieldDescriptor { @@ -280,6 +276,7 @@ void Builder_free(void* _self); VALUE Builder_alloc(VALUE klass); void Builder_register(VALUE module); Builder* ruby_to_Builder(VALUE value); +VALUE Builder_initialize(VALUE _self); VALUE Builder_add_message(VALUE _self, VALUE name); VALUE Builder_add_enum(VALUE _self, VALUE name); VALUE Builder_finalize_to_pool(VALUE _self, VALUE pool_rb); |