[Groonga-commit] ranguba/rroonga at e764aae [master] Fix a memory leak of Groonga::Table#column

Back to archive index

Kouhei Sutou null+****@clear*****
Sun May 4 23:54:02 JST 2014


Kouhei Sutou	2014-05-04 23:54:02 +0900 (Sun, 04 May 2014)

  New Revision: e764aaed147e54d8f697fd6492396a4d83bcec23
  https://github.com/ranguba/rroonga/commit/e764aaed147e54d8f697fd6492396a4d83bcec23

  Message:
    Fix a memory leak of Groonga::Table#column
    
    Groonga::Table#columns doesn't set name to retrieved columns. So cache
    system in Groonga::Table#column is broken. It causes a memory leak.
    
    GitHub: fix #16
    
    Reported by rutice. Thanks!!!

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

  Modified: ext/groonga/rb-grn-table.c (+16 -0)
===================================================================
--- ext/groonga/rb-grn-table.c    2014-05-04 23:13:09 +0900 (c466b3b)
+++ ext/groonga/rb-grn-table.c    2014-05-04 23:54:02 +0900 (2e656ba)
@@ -638,6 +638,8 @@ rb_grn_table_get_columns (int argc, VALUE *argv, VALUE self)
         grn_id *column_id;
         grn_obj *column;
         VALUE rb_column;
+        grn_user_data *user_data;
+        grn_bool need_to_set_name = GRN_FALSE;
 
         grn_table_cursor_get_key(context, cursor, &key);
         column_id = key;
@@ -649,7 +651,21 @@ rb_grn_table_get_columns (int argc, VALUE *argv, VALUE self)
             rb_exc_raise(exception);
         }
 
+        user_data = grn_obj_user_data(context, column);
+        if (user_data && !user_data->ptr) {
+            need_to_set_name = GRN_TRUE;
+        }
         rb_column = GRNOBJECT2RVAL(Qnil, context, column, GRN_FALSE);
+        if (need_to_set_name) {
+            char name[GRN_TABLE_MAX_KEY_SIZE];
+            int name_size = 0;
+            RbGrnNamedObject *rb_grn_named_object;
+            name_size = grn_column_name(context, column,
+                                        name, GRN_TABLE_MAX_KEY_SIZE);
+            rb_grn_named_object = RB_GRN_NAMED_OBJECT(DATA_PTR(rb_column));
+            rb_grn_named_object_set_name(rb_grn_named_object, name, name_size);
+        }
+
         rb_ary_push(rb_columns, rb_column);
     }
     rc = grn_table_cursor_close(context, cursor);
-------------- next part --------------
HTML����������������������������...
Download 



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