aboutsummaryrefslogtreecommitdiff
path: root/ruby/ext/google/protobuf_c/protobuf.h
diff options
context:
space:
mode:
authorPaul Yang <TeBoring@users.noreply.github.com>2017-10-03 17:28:49 -0700
committerGitHub <noreply@github.com>2017-10-03 17:28:49 -0700
commitcd5f49d0942e19a5854a325941918fca02fdb409 (patch)
treee4fde8a62907668dbada9c3332f181faf375c645 /ruby/ext/google/protobuf_c/protobuf.h
parentd6c32a818fd8590e1758d1ed86107a967468d1b6 (diff)
downloadprotobuf-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.h5
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);