[Groonga-commit] groonga/groonga-gobject at 26fc031 [master] Share common database close code

アーカイブの一覧に戻る

Kouhei Sutou null+****@clear*****
Tue Dec 3 22:16:06 JST 2013


Kouhei Sutou	2013-12-03 22:16:06 +0900 (Tue, 03 Dec 2013)

  New Revision: 26fc03112cb4dd1971273201b7f3854f48bc72fa
  https://github.com/groonga/groonga-gobject/commit/26fc03112cb4dd1971273201b7f3854f48bc72fa

  Message:
    Share common database close code

  Modified files:
    groonga-gobject/ggrn-context.c

  Modified: groonga-gobject/ggrn-context.c (+21 -16)
===================================================================
--- groonga-gobject/ggrn-context.c    2013-12-03 22:12:34 +0900 (9af376a)
+++ groonga-gobject/ggrn-context.c    2013-12-03 22:16:06 +0900 (85b4c9d)
@@ -45,6 +45,7 @@ typedef struct _GGrnContextPrivate	GGrnContextPrivate;
 struct _GGrnContextPrivate
 {
     grn_ctx *ctx;
+    gboolean own_database;
 };
 
 enum
@@ -61,6 +62,23 @@ ggrn_context_init(GGrnContext *object)
     GGrnContextPrivate *priv = GGRN_CONTEXT_GET_PRIVATE(object);
 
     priv->ctx = grn_ctx_open(0);
+    priv->own_database = FALSE;
+}
+
+static void
+dispose_database(GGrnContextPrivate *priv)
+{
+    grn_obj *using_database;
+
+    if (!priv->own_database) {
+        return;
+    }
+
+    using_database = grn_ctx_db(priv->ctx);
+    if (using_database) {
+        grn_obj_unlink(priv->ctx, using_database);
+    }
+    priv->own_database = FALSE;
 }
 
 static void
@@ -69,12 +87,7 @@ dispose(GObject *object)
     GGrnContextPrivate *priv = GGRN_CONTEXT_GET_PRIVATE(object);
 
     if (priv->ctx) {
-        grn_obj *using_database;
-
-        using_database = grn_ctx_db(priv->ctx);
-        if (using_database) {
-            grn_db_close(priv->ctx, using_database);
-        }
+        dispose_database(priv);
         grn_ctx_close(priv->ctx);
         priv->ctx = NULL;
     }
@@ -121,12 +134,8 @@ ggrn_context_open_database(GGrnContext *context,
                            const gchar *path, GError **error)
 {
     GGrnContextPrivate *priv = GGRN_CONTEXT_GET_PRIVATE(context);
-    grn_obj *using_database;
 
-    using_database = grn_ctx_db(priv->ctx);
-    if (using_database) {
-        grn_db_close(priv->ctx, using_database);
-    }
+    dispose_database(priv);
 
     grn_db_open(priv->ctx, path);
     return _ggrn_rc_check(priv->ctx->rc, error);
@@ -148,12 +157,8 @@ ggrn_context_create_database(GGrnContext *context,
                              const gchar *path, GError **error)
 {
     GGrnContextPrivate *priv = GGRN_CONTEXT_GET_PRIVATE(context);
-    grn_obj *using_database;
 
-    using_database = grn_ctx_db(priv->ctx);
-    if (using_database) {
-        grn_db_close(priv->ctx, using_database);
-    }
+    dispose_database(priv);
 
     grn_db_create(priv->ctx, path, NULL);
     return _ggrn_rc_check(priv->ctx->rc, error);
-------------- next part --------------
HTML����������������������������...
ダウンロード 



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