[libgda: 1/2] SQLite Provider: Removing static variable



commit 4caa783c341c8c7426de8c9ee8a96649f0ed5dc7
Author: Pavlo Solntsev <p sun fun gmail com>
Date:   Mon Aug 19 08:34:21 2019 -0500

    SQLite Provider: Removing static variable
    
    GdaServerProvider implements GdaLockable interface
    Static variable removed

 libgda/gda-server-provider.c        | 48 ++++++++++++++++++++++++++++++-
 libgda/sqlite/gda-sqlite-provider.c | 56 ++++++++++++++++++-------------------
 2 files changed, 75 insertions(+), 29 deletions(-)
---
diff --git a/libgda/gda-server-provider.c b/libgda/gda-server-provider.c
index f8a3f4b8e..0a262aa4c 100644
--- a/libgda/gda-server-provider.c
+++ b/libgda/gda-server-provider.c
@@ -66,9 +66,18 @@ typedef struct {
        GdaSqlParser  *parser;
 
        GHashTable    *jobs_hash; /* key = a job ID, value = a # */
+       GMutex mutex;
 } GdaServerProviderPrivate;
 
-G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GdaServerProvider, gda_server_provider, G_TYPE_OBJECT)
+static void
+gda_server_provider_iface_init (GdaLockableInterface *iface);
+
+
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GdaServerProvider,
+                                                                                                             
                          gda_server_provider,
+                                                                                                             
                          G_TYPE_OBJECT,
+                                                                                                             
                          G_IMPLEMENT_INTERFACE(GDA_TYPE_LOCKABLE, gda_server_provider_iface_init)
+                                                                                                             
                          G_ADD_PRIVATE(GdaServerProvider))
 
 #define CLASS(provider) (GDA_SERVER_PROVIDER_CLASS (G_OBJECT_GET_CLASS (provider)))
 #define GDA_DEBUG_VIRTUAL
@@ -163,6 +172,7 @@ gda_server_provider_init (GdaServerProvider *provider)
                                                               (GDestroyNotify) 
gda_server_provider_handler_info_free,
                                                               (GDestroyNotify) g_object_unref);
        priv->jobs_hash = NULL;
+       g_mutex_init (&priv->mutex);
 }
 
 static void
@@ -179,6 +189,7 @@ gda_server_provider_finalize (GObject *object)
        if (priv->parser)
                g_object_unref (priv->parser);
 
+       g_mutex_clear (&priv->mutex);
 
        /* chain to parent class */
        G_OBJECT_CLASS (gda_server_provider_parent_class)->finalize (object);
@@ -322,6 +333,41 @@ gda_server_provider_get_property (GObject *object,
   }
 }
 
+static void
+gda_server_provider_lock (GdaLockable *iface)
+{
+       GdaServerProvider *provider = GDA_SERVER_PROVIDER(iface);
+       GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
+
+       g_mutex_lock (&priv->mutex);
+}
+
+static void
+gda_server_provider_unlock (GdaLockable *iface)
+{
+       GdaServerProvider *provider = GDA_SERVER_PROVIDER(iface);
+       GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
+
+       g_mutex_unlock (&priv->mutex);
+}
+
+static gboolean
+gda_server_provider_trylock (GdaLockable *iface)
+{
+       GdaServerProvider *provider = GDA_SERVER_PROVIDER(iface);
+       GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
+
+       return g_mutex_trylock (&priv->mutex);
+}
+
+static void
+gda_server_provider_iface_init (GdaLockableInterface *iface)
+{
+       iface->lock = gda_server_provider_lock;
+       iface->unlock = gda_server_provider_unlock;
+       iface->trylock = gda_server_provider_trylock;
+}
+
 /**
  * gda_server_provider_set_impl_functions:
  * @klass: a #GdaServerProviderClass object
diff --git a/libgda/sqlite/gda-sqlite-provider.c b/libgda/sqlite/gda-sqlite-provider.c
index 7cafd5d1f..039ef0ec9 100644
--- a/libgda/sqlite/gda-sqlite-provider.c
+++ b/libgda/sqlite/gda-sqlite-provider.c
@@ -67,6 +67,7 @@
 #include <libgda/gda-debug-macros.h>
 #include <libgda/gda-provider-meta.h>
 #include <libgda/gda-provider.h>
+#include <libgda/gda-server-provider.h>
 
 #define FILE_EXTENSION ".db"
 static gchar *get_table_nth_column_name (GdaServerProvider *prov, GdaConnection *cnc, const gchar 
*table_name, gint pos);
@@ -777,7 +778,7 @@ static gchar *internal_sql[] = {
 static gchar *
 get_table_nth_column_name (GdaServerProvider *provider, GdaConnection *cnc, const gchar *table_name, gint 
pos)
 {
-       static GdaSet *params_set = NULL;
+       GdaSet *params_set = NULL;
        GdaDataModel *model;
        gchar *fname = NULL;
        GdaStatement *stm;
@@ -1481,16 +1482,15 @@ gda_sqlite_provider_close_connection (GdaServerProvider *provider, GdaConnection
 static const gchar *
 gda_sqlite_provider_get_server_version (GdaServerProvider *provider, GdaConnection *cnc)
 {
-       static GMutex mutex;
        static gchar *version_string = NULL;
 
        g_return_val_if_fail (GDA_IS_CONNECTION (cnc), FALSE);
        g_return_val_if_fail (gda_connection_get_provider (cnc) == provider, NULL);
 
-       g_mutex_lock (&mutex);
+       gda_lockable_lock (GDA_LOCKABLE(provider));
        if (!version_string)
                version_string = g_strdup_printf ("SQLite version %s", SQLITE_VERSION);
-       g_mutex_unlock (&mutex);
+       gda_lockable_unlock (GDA_LOCKABLE(provider));
 
        return (const gchar *) version_string;
 }
@@ -1812,9 +1812,8 @@ gda_sqlite_provider_begin_transaction (GdaServerProvider *provider, GdaConnectio
        }
 
        if (name) {
-               static GMutex mutex;
-               static GdaSet *params_set = NULL;
-               g_mutex_lock (&mutex);
+               GdaSet *params_set = NULL;
+               gda_lockable_lock (GDA_LOCKABLE(provider));
                if (!params_set)
                        params_set = gda_set_new_inline (1, "name", G_TYPE_STRING, name);
                else if (! gda_set_set_holder_value (params_set, error, "name", name))
@@ -1823,7 +1822,8 @@ gda_sqlite_provider_begin_transaction (GdaServerProvider *provider, GdaConnectio
                if (status && gda_connection_statement_execute_non_select (cnc, stm,
                                                                           params_set, NULL, error) == -1)
                        status = FALSE;
-               g_mutex_unlock (&mutex);
+               g_object_unref (params_set);
+               gda_lockable_unlock (GDA_LOCKABLE(provider));
        }
        else {
                stm = (GdaStatement*) g_ptr_array_index (priv->internal_stmt, INTERNAL_BEGIN);
@@ -1851,9 +1851,8 @@ gda_sqlite_provider_commit_transaction (GdaServerProvider *provider, GdaConnecti
   GdaSqliteProviderPrivate *priv = gda_sqlite_provider_get_instance_private (GDA_SQLITE_PROVIDER (provider));
 
        if (name) {
-               static GMutex mutex;
-               static GdaSet *params_set = NULL;
-               g_mutex_lock (&mutex);
+               GdaSet *params_set = NULL;
+               gda_lockable_lock (GDA_LOCKABLE(provider));
                if (!params_set)
                        params_set = gda_set_new_inline (1, "name", G_TYPE_STRING, name);
                else if (!gda_set_set_holder_value (params_set, error, "name", name))
@@ -1862,7 +1861,8 @@ gda_sqlite_provider_commit_transaction (GdaServerProvider *provider, GdaConnecti
                if (status && gda_connection_statement_execute_non_select (cnc, stm,
                                                                           params_set, NULL, error) == -1)
                        status = FALSE;
-               g_mutex_unlock (&mutex);
+               g_object_unref (params_set);
+               gda_lockable_unlock (GDA_LOCKABLE(provider));
        }
        else {
                stm = (GdaStatement*) g_ptr_array_index (priv->internal_stmt, INTERNAL_COMMIT);
@@ -1891,9 +1891,8 @@ gda_sqlite_provider_rollback_transaction (GdaServerProvider *provider,
   GdaSqliteProviderPrivate *priv = gda_sqlite_provider_get_instance_private (GDA_SQLITE_PROVIDER (provider));
 
        if (name) {
-               static GMutex mutex;
-               static GdaSet *params_set = NULL;
-               g_mutex_lock (&mutex);
+               GdaSet *params_set = NULL;
+               gda_lockable_lock (GDA_LOCKABLE(provider));
                if (!params_set)
                        params_set = gda_set_new_inline (1, "name", G_TYPE_STRING, name);
                else if (! gda_set_set_holder_value (params_set, error, "name", name))
@@ -1902,7 +1901,8 @@ gda_sqlite_provider_rollback_transaction (GdaServerProvider *provider,
                if (status && gda_connection_statement_execute_non_select (cnc, stm,
                                                                           params_set, NULL, error) == -1)
                        status = FALSE;
-               g_mutex_unlock (&mutex);
+               g_object_unref (params_set);
+               gda_lockable_unlock (GDA_LOCKABLE(provider));
        }
        else {
                stm = (GdaStatement*) g_ptr_array_index (priv->internal_stmt, INTERNAL_ROLLBACK);
@@ -1927,9 +1927,8 @@ gda_sqlite_provider_add_savepoint (GdaServerProvider *provider, GdaConnection *c
        g_return_val_if_fail (name && *name, FALSE);
   GdaSqliteProviderPrivate *priv = gda_sqlite_provider_get_instance_private (GDA_SQLITE_PROVIDER (provider));
 
-       static GMutex mutex;
-       static GdaSet *params_set = NULL;
-       g_mutex_lock (&mutex);
+       GdaSet *params_set = NULL;
+       gda_lockable_lock (GDA_LOCKABLE(provider));
        if (!params_set)
                params_set = gda_set_new_inline (1, "name", G_TYPE_STRING, name);
        else if (! gda_set_set_holder_value (params_set, error, "name", name))
@@ -1938,7 +1937,8 @@ gda_sqlite_provider_add_savepoint (GdaServerProvider *provider, GdaConnection *c
        if (status && gda_connection_statement_execute_non_select (cnc, stm,
                                                                   params_set, NULL, error) == -1)
                status = FALSE;
-       g_mutex_unlock (&mutex);
+       g_object_unref (params_set);
+       gda_lockable_unlock (GDA_LOCKABLE(provider));
 
        /*g_print ("%s(%p) => %s\n", __FUNCTION__, cnc, status ? "TRUE" : "FALSE");*/
        return status;
@@ -1956,9 +1956,8 @@ gda_sqlite_provider_rollback_savepoint (GdaServerProvider *provider, GdaConnecti
        g_return_val_if_fail (name && *name, FALSE);
   GdaSqliteProviderPrivate *priv = gda_sqlite_provider_get_instance_private (GDA_SQLITE_PROVIDER (provider));
 
-       static GMutex mutex;
-       static GdaSet *params_set = NULL;
-       g_mutex_lock (&mutex);
+       GdaSet *params_set = NULL;
+       gda_lockable_lock (GDA_LOCKABLE(provider));
        if (!params_set)
                params_set = gda_set_new_inline (1, "name", G_TYPE_STRING, name);
        else if (! gda_set_set_holder_value (params_set, error, "name", name))
@@ -1967,7 +1966,8 @@ gda_sqlite_provider_rollback_savepoint (GdaServerProvider *provider, GdaConnecti
        if (status && gda_connection_statement_execute_non_select (cnc, stm,
                                                                   params_set, NULL, error) == -1)
                status = FALSE;
-       g_mutex_unlock (&mutex);
+       g_object_unref (params_set);
+       gda_lockable_unlock (GDA_LOCKABLE(provider));
 
        /*g_print ("%s(%p) => %s\n", __FUNCTION__, cnc, status ? "TRUE" : "FALSE");*/
        return status;
@@ -1984,10 +1984,9 @@ gda_sqlite_provider_delete_savepoint (GdaServerProvider *provider, GdaConnection
        g_return_val_if_fail (name && *name, FALSE);
   GdaSqliteProviderPrivate *priv = gda_sqlite_provider_get_instance_private (GDA_SQLITE_PROVIDER (provider));
 
-       static GMutex mutex;
-       static GdaSet *params_set = NULL;
+       GdaSet *params_set = NULL;
        GdaStatement *stm;
-       g_mutex_lock (&mutex);
+       gda_lockable_lock (GDA_LOCKABLE(provider));
        if (!params_set)
                params_set = gda_set_new_inline (1, "name", G_TYPE_STRING, name);
        else if (! gda_set_set_holder_value (params_set, error, "name", name))
@@ -1997,7 +1996,8 @@ gda_sqlite_provider_delete_savepoint (GdaServerProvider *provider, GdaConnection
                                                                   params_set, NULL, error) == -1) {
                status = FALSE;
        }
-       g_mutex_unlock (&mutex);
+       g_object_unref (params_set);
+       gda_lockable_unlock (GDA_LOCKABLE(provider));
 
        /*g_print ("%s(%p) => %s\n", __FUNCTION__, cnc, status ? "TRUE" : "FALSE");*/
        return status;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]