diff options
author | Mark Spruiell <mes@zeroc.com> | 2015-06-08 19:51:15 -0400 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2015-06-08 19:51:15 -0400 |
commit | a837dd8c0410c4f5d7b885091c6ab51768f3572e (patch) | |
tree | c1baf27c91066f09c8358499f629dd9dea862f63 /ruby | |
parent | Removed work-around for JRE 8 bug, now fixed (diff) | |
download | ice-a837dd8c0410c4f5d7b885091c6ab51768f3572e.tar.bz2 ice-a837dd8c0410c4f5d7b885091c6ab51768f3572e.tar.xz ice-a837dd8c0410c4f5d7b885091c6ab51768f3572e.zip |
ICE-6553 - Ruby segfault in slicing/objects test
Diffstat (limited to 'ruby')
-rw-r--r-- | ruby/src/IceRuby/Types.cpp | 19 | ||||
-rw-r--r-- | ruby/src/IceRuby/Types.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/ruby/src/IceRuby/Types.cpp b/ruby/src/IceRuby/Types.cpp index 18bf6ca517b..a0272a86967 100644 --- a/ruby/src/IceRuby/Types.cpp +++ b/ruby/src/IceRuby/Types.cpp @@ -2417,6 +2417,11 @@ IceRuby::ProxyInfo::destroy() IceRuby::ObjectWriter::ObjectWriter(VALUE object, ObjectMap* objectMap) : _object(object), _map(objectMap) { + // + // Mark the object as in use for the lifetime of this wrapper. + // + rb_gc_register_address(&_object); + volatile VALUE cls = CLASS_OF(object); volatile VALUE type = callRuby(rb_const_get, cls, rb_intern("ICE_TYPE")); assert(!NIL_P(type)); @@ -2424,6 +2429,11 @@ IceRuby::ObjectWriter::ObjectWriter(VALUE object, ObjectMap* objectMap) : assert(_info); } +IceRuby::ObjectWriter::~ObjectWriter() +{ + rb_gc_unregister_address(&_object); +} + void IceRuby::ObjectWriter::ice_preMarshal() { @@ -2498,6 +2508,15 @@ IceRuby::ObjectWriter::writeMembers(const Ice::OutputStreamPtr& os, const DataMe IceRuby::ObjectReader::ObjectReader(VALUE object, const ClassInfoPtr& info) : _object(object), _info(info) { + // + // Mark the object as in use for the lifetime of this wrapper. + // + rb_gc_register_address(&_object); +} + +IceRuby::ObjectReader::~ObjectReader() +{ + rb_gc_unregister_address(&_object); } void diff --git a/ruby/src/IceRuby/Types.h b/ruby/src/IceRuby/Types.h index e816d38758f..6a849d257ab 100644 --- a/ruby/src/IceRuby/Types.h +++ b/ruby/src/IceRuby/Types.h @@ -453,6 +453,7 @@ class ObjectWriter : public Ice::ObjectWriter public: ObjectWriter(VALUE, ObjectMap*); + virtual ~ObjectWriter(); virtual void ice_preMarshal(); @@ -475,6 +476,7 @@ class ObjectReader : public Ice::ObjectReader public: ObjectReader(VALUE, const ClassInfoPtr&); + virtual ~ObjectReader(); virtual void ice_postUnmarshal(); |