[Groonga-commit] ranguba/rroonga at 032e0f2 [master] accessor: use floating object mechanism

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Aug 17 00:29:53 JST 2014


Kouhei Sutou	2014-08-17 00:29:53 +0900 (Sun, 17 Aug 2014)

  New Revision: 032e0f2ad84fc8a5a0689ae970637a246c948311
  https://github.com/ranguba/rroonga/commit/032e0f2ad84fc8a5a0689ae970637a246c948311

  Message:
    accessor: use floating object mechanism
    
    It fixes a crash bug that is introduced at
    5976731352ed992ed3b6c4c0434e9ffccc03477c.
    
    Reported by cosmo0920. Thanks!!!

  Modified files:
    ext/groonga/rb-grn-accessor.c
    ext/groonga/rb-grn-context.c
    ext/groonga/rb-grn-table.c

  Modified: ext/groonga/rb-grn-accessor.c (+1 -0)
===================================================================
--- ext/groonga/rb-grn-accessor.c    2014-08-17 00:14:47 +0900 (4922cad)
+++ ext/groonga/rb-grn-accessor.c    2014-08-17 00:29:53 +0900 (55de00a)
@@ -66,6 +66,7 @@ void
 rb_grn_accessor_finalizer (grn_ctx *context, grn_obj *grn_object,
                            RbGrnAccessor *rb_accessor)
 {
+    rb_grn_context_unregister_floating_object(RB_GRN_OBJECT(rb_accessor));
     rb_grn_named_object_finalizer(context, grn_object,
                                   RB_GRN_NAMED_OBJECT(rb_accessor));
     if (context && rb_accessor->value)

  Modified: ext/groonga/rb-grn-context.c (+1 -1)
===================================================================
--- ext/groonga/rb-grn-context.c    2014-08-17 00:14:47 +0900 (7abeea2)
+++ ext/groonga/rb-grn-context.c    2014-08-17 00:29:53 +0900 (f11e13b)
@@ -120,7 +120,7 @@ rb_grn_context_close_floating_objects (RbGrnContext *rb_grn_context)
     rb_grn_context->floating_objects = NULL;
     GRN_HASH_EACH(context, floating_objects, id, &floating_object, NULL, NULL, {
             (*floating_object)->floating = GRN_FALSE;
-            grn_obj_close(context, RB_GRN_OBJECT(*floating_object)->object);
+            rb_funcall((*floating_object)->self, rb_intern("close"), 0);
         });
     grn_hash_close(context, floating_objects);
 }

  Modified: ext/groonga/rb-grn-table.c (+1 -1)
===================================================================
--- ext/groonga/rb-grn-table.c    2014-08-17 00:14:47 +0900 (6324330)
+++ ext/groonga/rb-grn-table.c    2014-08-17 00:29:53 +0900 (44ae00e)
@@ -544,7 +544,7 @@ rb_grn_table_get_column (VALUE self, VALUE rb_name)
     owner = column->header.type == GRN_ACCESSOR;
     rb_column = GRNCOLUMN2RVAL(Qnil, context, column, owner);
     if (owner) {
-        rb_iv_set(rb_column, "table", self);
+        rb_grn_context_register_floating_object(DATA_PTR(rb_column));
     }
     rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(DATA_PTR(rb_column)),
                                  name, name_size);
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index