[libgda: 1/2] SQLite Provider: Removing static variable
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda: 1/2] SQLite Provider: Removing static variable
- Date: Tue, 20 Aug 2019 13:13:21 +0000 (UTC)
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]