[Groonga-mysql-commit] mroonga/mroonga [fix-for-visual-studio] Fix a memory leak on DROP DATABASE

アーカイブの一覧に戻る

Kouhei Sutou null+****@clear*****
Thu Oct 4 10:38:52 JST 2012


Kouhei Sutou	2012-03-09 00:03:32 +0900 (Fri, 09 Mar 2012)

  New Revision: f88d6186ea3c0a00e13a90e86b86ad821abe54ea
  https://github.com/mroonga/mroonga/commit/f88d6186ea3c0a00e13a90e86b86ad821abe54ea

  Log:
    Fix a memory leak on DROP DATABASE
    
    We should remove created DB and use the same grn_ctx for
    both creating and removing.

  Modified files:
    ha_mroonga.cc

  Modified: ha_mroonga.cc (+12 -11)
===================================================================
--- ha_mroonga.cc    2012-03-08 23:47:02 +0900 (51480d2)
+++ ha_mroonga.cc    2012-03-09 00:03:32 +0900 (141a720)
@@ -921,20 +921,21 @@ static void mrn_drop_db(handlerton *hton, char *path)
   char db_name[MRN_MAX_PATH_SIZE];
   mrn_db_path_gen(path, db_path);
   mrn_db_name_gen(path, db_name);
-  grn_ctx *ctx;
-  ctx = grn_ctx_open(0);
-  mrn_change_encoding(ctx, system_charset_info);
-  struct stat dummy;
-  if (stat(db_path, &dummy) == 0) {
-    grn_obj *db = grn_db_open(ctx, db_path);
-    if (grn_obj_remove(ctx, db)) {
-      GRN_LOG(ctx, GRN_LOG_ERROR, "cannot drop database (%s)", db_path);
+  pthread_mutex_lock(&mrn_db_mutex);
+  grn_obj *db = NULL;
+  if (mrn_hash_get(&mrn_ctx, mrn_hash, db_name, &db) != 0) {
+    struct stat dummy;
+    if (stat(db_path, &dummy) == 0) {
+      db = grn_db_open(&mrn_ctx, db_path);
     }
   }
-  pthread_mutex_lock(&mrn_db_mutex);
-  mrn_hash_remove(ctx, mrn_hash, db_name);
+  if (db) {
+    if (grn_obj_remove(&mrn_ctx, db)) {
+      GRN_LOG(&mrn_ctx, GRN_LOG_ERROR, "cannot drop database (%s)", db_path);
+    }
+  }
+  mrn_hash_remove(&mrn_ctx, mrn_hash, db_name);
   pthread_mutex_unlock(&mrn_db_mutex);
-  grn_ctx_fin(ctx);
   DBUG_VOID_RETURN;
 }
 
-------------- next part --------------
HTML����������������������������...
ダウンロード 



More information about the Groonga-mysql-commit mailing list
アーカイブの一覧に戻る