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