From: Kouhei S. <nu...@co...> - 2017-11-18 15:59:59
|
Kouhei Sutou 2017-11-19 00:59:06 +0900 (Sun, 19 Nov 2017) New Revision: eb1c856ac8f89dfe375ee3d21127f125591c771c https://github.com/ruby-gnome2/ruby-gnome2/commit/eb1c856ac8f89dfe375ee3d21127f125591c771c Message: glib2: don't GC-ed source frozen data for GLib::Bytes Modified files: glib2/ext/glib2/rbglib-bytes.c glib2/test/test-bytes.rb Modified: glib2/ext/glib2/rbglib-bytes.c (+1 -0) =================================================================== --- glib2/ext/glib2/rbglib-bytes.c 2017-11-17 00:38:25 +0900 (efc44d2b7) +++ glib2/ext/glib2/rbglib-bytes.c 2017-11-19 00:59:06 +0900 (8e02ff8db) @@ -40,6 +40,7 @@ rg_initialize(int argc, VALUE *argv, VALUE self) const gchar *data = RVAL2CSTR_PTR(rb_data); if (RB_OBJ_FROZEN(rb_data)) { bytes = g_bytes_new_static(data, RSTRING_LEN(rb_data)); + rb_iv_set(self, "source", rb_data); } else { bytes = g_bytes_new(data, RSTRING_LEN(rb_data)); } Modified: glib2/test/test-bytes.rb (+15 -0) =================================================================== --- glib2/test/test-bytes.rb 2017-11-17 00:38:25 +0900 (952c1541f) +++ glib2/test/test-bytes.rb 2017-11-19 00:59:06 +0900 (0ba20d1db) @@ -21,6 +21,21 @@ class TestGLibBytes < Test::Unit::TestCase only_glib_version(2, 32, 0) end + sub_test_case ".new" do + def create_bytes(options={}) + data = "Hello" + data.freeze if options[:freeze] + [data.object_id, GLib::Bytes.new(data)] + end + + test "frozen" do + id, bytes = create_bytes(:freeze => true) + GC.start + assert_equal(bytes.to_s, + ObjectSpace._id2ref(id)) + end + end + test "#to_s" do data = "Hello" bytes = GLib::Bytes.new(data) |