[libgda] Removed GdaMutex, replaced by GRecMutex
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Removed GdaMutex, replaced by GRecMutex
- Date: Tue, 20 May 2014 20:12:00 +0000 (UTC)
commit 24232161b9f7b4571d44a9afc09df447b0b534da
Author: Vivien Malerba <malerba gnome-db org>
Date: Tue May 20 21:15:15 2014 +0200
Removed GdaMutex, replaced by GRecMutex
doc/C/libgda-6.0-docs.sgml | 1 -
doc/C/libgda-sections.txt | 11 --
doc/C/migration4.xml | 14 ++-
libgda/Makefile.am | 2 -
libgda/gda-attributes-manager.c | 57 ++++----
libgda/gda-connection.c | 1 -
libgda/gda-data-proxy.c | 186 +++++++++++++-------------
libgda/gda-holder.c | 15 +-
libgda/gda-lockable.h | 2 +-
libgda/gda-meta-store.c | 147 ++++++++++----------
libgda/gda-mutex.c | 126 -----------------
libgda/gda-mutex.h | 63 ---------
libgda/libgda.h.in | 2 -
libgda/libgda.symbols | 5 -
libgda/sql-parser/gda-sql-parser-private.h | 9 +-
libgda/sql-parser/gda-sql-parser.c | 24 ++--
providers/web/gda-web-provider.c | 12 +-
providers/web/gda-web-util.c | 71 +++++-----
providers/web/gda-web.h | 3 +-
tests/multi-threading/Makefile.am | 9 +-
tests/multi-threading/check_mutex.c | 205 ----------------------------
tests/multi-threading/check_parser.c | 16 +-
22 files changed, 278 insertions(+), 703 deletions(-)
---
diff --git a/doc/C/libgda-6.0-docs.sgml b/doc/C/libgda-6.0-docs.sgml
index 49c2bb2..e4fba7a 100644
--- a/doc/C/libgda-6.0-docs.sgml
+++ b/doc/C/libgda-6.0-docs.sgml
@@ -1114,7 +1114,6 @@ g_object_unref (store);
<chapter id="multi-threading">
<title>Multi threading</title>
- <xi:include href="xml/gda-mutex.xml"/>
<xi:include href="xml/gda-lockable.xml"/>
<xi:include href="xml/gda-worker.xml"/>
</chapter>
diff --git a/doc/C/libgda-sections.txt b/doc/C/libgda-sections.txt
index 8f287b5..0bebbe8 100644
--- a/doc/C/libgda-sections.txt
+++ b/doc/C/libgda-sections.txt
@@ -760,17 +760,6 @@ gda_vconnection_hub_get_type
</SECTION>
<SECTION>
-<FILE>gda-mutex</FILE>
-<TITLE>GdaMutex</TITLE>
-GdaMutex
-gda_mutex_new
-gda_mutex_lock
-gda_mutex_trylock
-gda_mutex_unlock
-gda_mutex_free
-</SECTION>
-
-<SECTION>
<FILE>gda-xa-transaction</FILE>
<TITLE>GdaXaTransaction</TITLE>
GdaXaTransaction
diff --git a/doc/C/migration4.xml b/doc/C/migration4.xml
index 8581221..f0a98dc 100644
--- a/doc/C/migration4.xml
+++ b/doc/C/migration4.xml
@@ -72,7 +72,7 @@
</para>
</sect2>
- <sect2><title>API changes</title>
+ <sect2 id="migration-4-cnc-api-changes"><title>API changes</title>
<para>
This section documents most of the API changes for the <link
linkend="GdaConnection">GdaConnection</link> object.
<itemizedlist>
@@ -86,15 +86,19 @@
<listitem><para>The gda_connection_internal_get_provider_data() has been replaced by
<link
linkend="gda-connection-internal-get-provider-data-error">gda_connection_internal_get_provider_data_error</link>()</para></listitem>
<listitem><para>The <link
linkend="gda-server-operation-get-sql-identifier-at">gda_server_operation_get_sql_identifier_at()</link> and
<link
linkend="gda-server-operation-get-sql-identifier-at-path">gda_server_operation_get_sql_identifier_at_path()</link>
now have an extra argument for errors</para></listitem>
- <listitem><para>The </para></listitem>
- <listitem><para>The </para></listitem>
- <listitem><para>The </para></listitem>
- <listitem><para>The </para></listitem>
</itemizedlist>
</para>
</sect2>
</sect1>
+ <sect1><title>API changes</title>
+ <para>Version 6.0 introduced some API changes which are listed below and in the section about
+ <link linkend="migration-4-cnc-api-changes">GdaConnection's API changes</link>.
+ <itemizedlist>
+ <listitem><para>GdaMutex has been removed, being redundant with GRecMutex</para></listitem>
+ </itemizedlist>
+ </para>
+ </sect1>
<sect1><title>Multi threading and asynchronicity</title>
<para>
diff --git a/libgda/Makefile.am b/libgda/Makefile.am
index 26ca0c4..06264dc 100644
--- a/libgda/Makefile.am
+++ b/libgda/Makefile.am
@@ -84,7 +84,6 @@ gda_headers = \
gda-log.h \
gda-meta-store.h \
gda-meta-struct.h \
- gda-mutex.h \
gda-quark-list.h \
gda-repetitive-statement.h \
gda-row.h \
@@ -186,7 +185,6 @@ libgda_sources = \
gda-meta-store-extra.h \
gda-meta-struct-private.h \
gda-marshal.c \
- gda-mutex.c \
gda-server-operation-private.h \
gda-types.c \
gda-types.h \
diff --git a/libgda/gda-attributes-manager.c b/libgda/gda-attributes-manager.c
index 0a8d8c3..a129932 100644
--- a/libgda/gda-attributes-manager.c
+++ b/libgda/gda-attributes-manager.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2008 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2009 Bas Driessen <bas driessen xobas com>
* Copyright (C) 2010 Jonh Wendell <jwendell gnome org>
* Copyright (C) 2012 Daniel Espinosa <despinosa src gnome org>
@@ -23,7 +23,6 @@
#include <string.h>
#include <gda-attributes-manager.h>
#include <gda-value.h>
-#include <gda-mutex.h>
/*
* Structure for the attribute names
@@ -49,7 +48,7 @@ static void objattrs_unref (ObjAttrs *attrs);
struct _GdaAttributesManager {
- GdaMutex *mutex;
+ GRecMutex mutex;
gboolean for_objects; /* TRUE if key->data are GObjects */
GdaAttributesManagerSignal signal_func;
gpointer signal_data;
@@ -107,7 +106,7 @@ gda_attributes_manager_new (gboolean for_objects, GdaAttributesManagerSignal sig
GdaAttributesManager *mgr;
mgr = g_new0 (GdaAttributesManager, 1);
- mgr->mutex = gda_mutex_new ();
+ g_rec_mutex_init (& (mgr->mutex));
mgr->obj_hash = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL,
(GDestroyNotify) objattrs_unref);
mgr->for_objects = for_objects;
@@ -120,16 +119,16 @@ gda_attributes_manager_new (gboolean for_objects, GdaAttributesManagerSignal sig
static void
obj_destroyed_cb (ObjAttrs *attrs, GObject *where_the_object_was)
{
- GdaMutex *mutex;
+ GRecMutex *mutex;
/* rem: we need to keep a pointer to mutex because attrs may be destroyed
* in g_hash_table_remove */
- mutex = attrs->mgr->mutex;
+ mutex = & (attrs->mgr->mutex);
- gda_mutex_lock (mutex);
+ g_rec_mutex_lock (mutex);
attrs->objects = g_slist_remove (attrs->objects, where_the_object_was);
g_hash_table_remove (attrs->mgr->obj_hash, where_the_object_was);
- gda_mutex_unlock (mutex);
+ g_rec_mutex_unlock (mutex);
}
static void
@@ -150,14 +149,14 @@ foreach_destroy_func (gpointer ptr, ObjAttrs *attrs, GdaAttributesManager *mgr)
void
gda_attributes_manager_free (GdaAttributesManager *mgr)
{
- GdaMutex *mutex;
- mutex = mgr->mutex;
- gda_mutex_lock (mutex);
+ GRecMutex *mutex;
+ mutex = &(mgr->mutex);
+ g_rec_mutex_lock (mutex);
g_hash_table_foreach (mgr->obj_hash, (GHFunc) foreach_destroy_func, mgr);
g_hash_table_destroy (mgr->obj_hash);
g_free (mgr);
- gda_mutex_unlock (mutex);
- gda_mutex_free (mutex);
+ g_rec_mutex_unlock (mutex);
+ g_rec_mutex_clear (mutex);
}
typedef struct {
@@ -178,7 +177,7 @@ manager_real_set (GdaAttributesManager *mgr, gpointer ptr,
if (mgr->for_objects)
g_return_if_fail (G_IS_OBJECT (ptr));
- gda_mutex_lock (mgr->mutex);
+ g_rec_mutex_lock (& (mgr->mutex));
/* pick up the correct ObjAttrs */
objattrs = g_hash_table_lookup (mgr->obj_hash, ptr);
@@ -242,7 +241,7 @@ manager_real_set (GdaAttributesManager *mgr, gpointer ptr,
if (mgr->signal_func && mgr->for_objects)
mgr->signal_func ((GObject*) ptr, att_name, value, mgr->signal_data);
- gda_mutex_unlock (mgr->mutex);
+ g_rec_mutex_unlock (& (mgr->mutex));
}
/**
@@ -302,7 +301,7 @@ gda_attributes_manager_get (GdaAttributesManager *mgr, gpointer ptr, const gchar
ObjAttrs *objattrs;
const GValue *cvalue = NULL;
- gda_mutex_lock (mgr->mutex);
+ g_rec_mutex_lock (& (mgr->mutex));
objattrs = g_hash_table_lookup (mgr->obj_hash, ptr);
if (objattrs) {
@@ -311,7 +310,7 @@ gda_attributes_manager_get (GdaAttributesManager *mgr, gpointer ptr, const gchar
cvalue = g_hash_table_lookup (objattrs->values_hash, &attname);
}
- gda_mutex_unlock (mgr->mutex);
+ g_rec_mutex_unlock (& (mgr->mutex));
return cvalue;
}
@@ -331,13 +330,13 @@ gda_attributes_manager_copy (GdaAttributesManager *from_mgr, gpointer *from,
{
ObjAttrs *from_objattrs, *to_objattrs;
- gda_mutex_lock (from_mgr->mutex);
- gda_mutex_lock (to_mgr->mutex);
+ g_rec_mutex_lock (& (from_mgr->mutex));
+ g_rec_mutex_lock (& (to_mgr->mutex));
from_objattrs = g_hash_table_lookup (from_mgr->obj_hash, from);
if (!from_objattrs) {
- gda_mutex_unlock (from_mgr->mutex);
- gda_mutex_unlock (to_mgr->mutex);
+ g_rec_mutex_unlock (& (to_mgr->mutex));
+ g_rec_mutex_unlock (& (from_mgr->mutex));
return;
}
@@ -350,8 +349,8 @@ gda_attributes_manager_copy (GdaAttributesManager *from_mgr, gpointer *from,
if (from_mgr->for_objects)
g_object_weak_ref (G_OBJECT (to), (GWeakNotify) obj_destroyed_cb, from_objattrs);
- gda_mutex_unlock (from_mgr->mutex);
- gda_mutex_unlock (to_mgr->mutex);
+ g_rec_mutex_unlock (& (to_mgr->mutex));
+ g_rec_mutex_unlock (& (from_mgr->mutex));
return;
}
@@ -361,8 +360,8 @@ gda_attributes_manager_copy (GdaAttributesManager *from_mgr, gpointer *from,
cdata.ptr = to;
g_hash_table_foreach (from_objattrs->values_hash, (GHFunc) foreach_copy_func, &cdata);
- gda_mutex_unlock (from_mgr->mutex);
- gda_mutex_unlock (to_mgr->mutex);
+ g_rec_mutex_unlock (& (to_mgr->mutex));
+ g_rec_mutex_unlock (& (from_mgr->mutex));
}
static void
@@ -386,7 +385,7 @@ gda_attributes_manager_clear (GdaAttributesManager *mgr, gpointer ptr)
{
ObjAttrs *objattrs;
- gda_mutex_lock (mgr->mutex);
+ g_rec_mutex_lock (& (mgr->mutex));
objattrs = g_hash_table_lookup (mgr->obj_hash, ptr);
if (objattrs) {
@@ -394,7 +393,7 @@ gda_attributes_manager_clear (GdaAttributesManager *mgr, gpointer ptr)
g_hash_table_remove (mgr->obj_hash, ptr);
}
- gda_mutex_unlock (mgr->mutex);
+ g_rec_mutex_unlock (& (mgr->mutex));
}
typedef struct {
@@ -421,7 +420,7 @@ gda_attributes_manager_foreach (GdaAttributesManager *mgr, gpointer ptr,
g_return_if_fail (func);
g_return_if_fail (ptr);
- gda_mutex_lock (mgr->mutex);
+ g_rec_mutex_lock (& (mgr->mutex));
objattrs = g_hash_table_lookup (mgr->obj_hash, ptr);
if (objattrs) {
@@ -432,7 +431,7 @@ gda_attributes_manager_foreach (GdaAttributesManager *mgr, gpointer ptr,
g_hash_table_foreach (objattrs->values_hash, (GHFunc) foreach_foreach_func, &fdata);
}
- gda_mutex_unlock (mgr->mutex);
+ g_rec_mutex_unlock (& (mgr->mutex));
}
static void
diff --git a/libgda/gda-connection.c b/libgda/gda-connection.c
index c0cedee..ad80c42 100644
--- a/libgda/gda-connection.c
+++ b/libgda/gda-connection.c
@@ -62,7 +62,6 @@
#include <sql-parser/gda-statement-struct-trans.h>
#include <libgda/gda-meta-store-extra.h>
#include <libgda/gda-util.h>
-#include <libgda/gda-mutex.h>
#include <libgda/gda-lockable.h>
#include <libgda/gda-repetitive-statement.h>
#include <gda-statement-priv.h>
diff --git a/libgda/gda-data-proxy.c b/libgda/gda-data-proxy.c
index a29ecec..66453bc 100644
--- a/libgda/gda-data-proxy.c
+++ b/libgda/gda-data-proxy.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006 - 2011 Murray Cumming <murrayc murrayc com>
- * Copyright (C) 2006 - 2012 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2006 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2007 Armin Burgmeier <arminb src gnome org>
* Copyright (C) 2007 Leonardo Boshell <lb kmc com co>
* Copyright (C) 2009 Bas Driessen <bas driessen xobas com>
@@ -46,7 +46,6 @@
#include <sql-parser/gda-statement-struct-util.h>
#include <libgda/gda-custom-marshal.h>
#include <libgda/gda-types.h>
-#include <gda-mutex.h>
/*
* Main static functions
@@ -202,7 +201,7 @@ static void display_chunk_free (DisplayChunk *chunk);
*/
struct _GdaDataProxyPrivate
{
- GdaMutex *mutex;
+ GRecMutex mutex;
GdaDataModel *model; /* Gda model which is proxied */
@@ -765,8 +764,9 @@ gda_data_proxy_data_model_init (GdaDataModelIface *iface)
static void
do_init (GdaDataProxy *proxy)
{
- if (!proxy->priv->mutex)
- proxy->priv->mutex = gda_mutex_new ();
+ g_rec_mutex_init (& (proxy->priv->mutex)); /* REM: make sure clean_proxy() is called first because
+ * we must not call g_rec_mutex_init() on an already
initialized
+ * GRecMutex, see doc. */
proxy->priv->modify_rows = g_hash_table_new_full (g_int_hash, g_int_equal, g_free, NULL);
proxy->priv->notify_changes = TRUE;
@@ -925,6 +925,8 @@ clean_proxy (GdaDataProxy *proxy)
g_free (proxy->priv->columns_attrs);
proxy->priv->columns_attrs = NULL;
}
+
+ g_rec_mutex_clear (& (proxy->priv->mutex));
}
static void
@@ -937,10 +939,6 @@ gda_data_proxy_dispose (GObject *object)
proxy = GDA_DATA_PROXY (object);
if (proxy->priv) {
clean_proxy (proxy);
- if (proxy->priv->mutex) {
- gda_mutex_free (proxy->priv->mutex);
- proxy->priv->mutex = NULL;
- }
clean_cached_changes (proxy);
}
@@ -977,7 +975,7 @@ gda_data_proxy_set_property (GObject *object,
proxy = GDA_DATA_PROXY (object);
if (proxy->priv) {
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
switch (param_id) {
case PROP_MODEL: {
GdaDataModel *model;
@@ -1004,7 +1002,7 @@ gda_data_proxy_set_property (GObject *object,
if (! (gda_data_model_get_access_flags (model) & GDA_DATA_MODEL_ACCESS_RANDOM)) {
g_warning (_("GdaDataProxy can't handle non random access data models"));
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return;
}
proxy->priv->model = g_object_ref (model);
@@ -1090,7 +1088,7 @@ gda_data_proxy_set_property (GObject *object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
}
@@ -1104,7 +1102,7 @@ gda_data_proxy_get_property (GObject *object,
proxy = GDA_DATA_PROXY (object);
if (proxy->priv) {
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
switch (param_id) {
case PROP_ADD_NULL_ENTRY:
g_value_set_boolean (value, proxy->priv->add_null_entry);
@@ -1122,7 +1120,7 @@ gda_data_proxy_get_property (GObject *object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
}
@@ -1466,18 +1464,18 @@ gda_data_proxy_get_values (GdaDataProxy *proxy, gint proxy_row, gint *cols_index
g_return_val_if_fail (proxy->priv, NULL);
g_return_val_if_fail (proxy_row >= 0, NULL);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
for (i = 0; i < n_cols; i++) {
value = gda_data_proxy_get_value_at ((GdaDataModel *) proxy, cols_index[i], proxy_row, NULL);
if (value)
retval = g_slist_prepend (retval, (GValue *) value);
else {
g_slist_free (retval);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return NULL;
}
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return g_slist_reverse (retval);
}
@@ -1506,7 +1504,7 @@ gda_data_proxy_get_value_attributes (GdaDataProxy *proxy, gint proxy_row, gint c
g_return_val_if_fail (proxy->priv, 0);
g_return_val_if_fail (proxy_row >= 0, 0);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
model_column = col % proxy->priv->model_nb_cols;
model_row = proxy_row_to_model_row (proxy, proxy_row);
flags = gda_data_model_get_attributes_at (proxy->priv->model, model_column, model_row);
@@ -1546,7 +1544,7 @@ gda_data_proxy_get_value_attributes (GdaDataProxy *proxy, gint proxy_row, gint c
flags |= GDA_VALUE_ATTR_DATA_NON_VALID;
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
/*g_print ("%s (%p, %d, %d) => %d\n", __FUNCTION__, proxy, col, proxy_row, flags);*/
return flags;
@@ -1572,7 +1570,7 @@ gda_data_proxy_alter_value_attributes (GdaDataProxy *proxy, gint proxy_row, gint
g_return_if_fail (proxy->priv);
g_return_if_fail (proxy_row >= 0);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
model_col = col % proxy->priv->model_nb_cols;
if (alter_flags & GDA_VALUE_ATTR_IS_NULL)
@@ -1628,7 +1626,7 @@ gda_data_proxy_alter_value_attributes (GdaDataProxy *proxy, gint proxy_row, gint
}
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
/**
@@ -1668,19 +1666,19 @@ gda_data_proxy_delete (GdaDataProxy *proxy, gint proxy_row)
g_return_if_fail (proxy->priv);
g_return_if_fail (proxy_row >= 0);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
if (proxy->priv->add_null_entry && proxy_row == 0) {
g_warning (_("The first row is an empty row artificially prepended and cannot be removed"));
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return;
}
if (! (gda_data_model_get_access_flags ((GdaDataModel*) proxy) & GDA_DATA_MODEL_ACCESS_DELETE)) {
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return;
}
@@ -1737,7 +1735,7 @@ gda_data_proxy_delete (GdaDataProxy *proxy, gint proxy_row)
0, proxy_row, TRUE);
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
/**
@@ -1758,7 +1756,7 @@ gda_data_proxy_undelete (GdaDataProxy *proxy, gint proxy_row)
g_return_if_fail (proxy->priv);
g_return_if_fail (proxy_row >= 0);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -1788,7 +1786,7 @@ gda_data_proxy_undelete (GdaDataProxy *proxy, gint proxy_row)
0, proxy_row, FALSE);
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
/**
@@ -1949,7 +1947,7 @@ gda_data_proxy_cancel_row_changes (GdaDataProxy *proxy, gint proxy_row, gint col
g_return_if_fail (proxy->priv);
g_return_if_fail (proxy_row >= 0);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -2024,7 +2022,7 @@ gda_data_proxy_cancel_row_changes (GdaDataProxy *proxy, gint proxy_row, gint col
else
g_warning ("GdaDataProxy column %d is not a modifiable data column", col);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
static gboolean commit_row_modif (GdaDataProxy *proxy, RowModif *rm, gboolean adjust_display, GError
**error);
@@ -2064,7 +2062,7 @@ commit_row_modif (GdaDataProxy *proxy, RowModif *rm, gboolean adjust_display, GE
if (!rm)
return TRUE;
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
model_row = rm->model_row;
@@ -2088,7 +2086,7 @@ commit_row_modif (GdaDataProxy *proxy, RowModif *rm, gboolean adjust_display, GE
0, proxy_row, rm->model_row, &lerror);
if (lerror) {
g_propagate_error (error, lerror);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return FALSE;
}
@@ -2240,7 +2238,7 @@ commit_row_modif (GdaDataProxy *proxy, RowModif *rm, gboolean adjust_display, GE
if (adjust_display)
adjust_displayed_chunk (proxy);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return !err;
}
@@ -2344,7 +2342,7 @@ gda_data_proxy_set_sample_size (GdaDataProxy *proxy, gint sample_size)
g_return_if_fail (GDA_IS_DATA_PROXY (proxy));
g_return_if_fail (proxy->priv);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -2358,7 +2356,7 @@ gda_data_proxy_set_sample_size (GdaDataProxy *proxy, gint sample_size)
0, sample_size);
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
/**
@@ -2392,7 +2390,7 @@ gda_data_proxy_set_sample_start (GdaDataProxy *proxy, gint sample_start)
g_return_if_fail (proxy->priv);
g_return_if_fail (sample_start >= 0);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -2402,7 +2400,7 @@ gda_data_proxy_set_sample_start (GdaDataProxy *proxy, gint sample_start)
adjust_displayed_chunk (proxy);
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
/**
@@ -2505,7 +2503,7 @@ display_chunks_dump (G_GNUC_UNUSED GdaDataProxy *proxy)
static void
ensure_chunk_sync (GdaDataProxy *proxy)
{
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (proxy->priv->chunk_sync_idle_id) {
gboolean defer_sync = proxy->priv->defer_sync;
proxy->priv->defer_sync = FALSE;
@@ -2513,7 +2511,7 @@ ensure_chunk_sync (GdaDataProxy *proxy)
chunk_sync_idle (proxy);
proxy->priv->defer_sync = defer_sync;
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
/*
@@ -2524,7 +2522,7 @@ static gboolean
chunk_sync_idle (GdaDataProxy *proxy)
{
#define IDLE_STEP 50
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
gboolean finished = FALSE;
guint index, max_steps, step;
@@ -2540,7 +2538,7 @@ chunk_sync_idle (GdaDataProxy *proxy)
}
if (!proxy->priv->chunk_to) {
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return FALSE; /* nothing to do */
}
@@ -2677,7 +2675,7 @@ chunk_sync_idle (GdaDataProxy *proxy)
else
g_print ("Sync. is NOT finished yet\n");
#endif
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return !finished;
}
@@ -2686,7 +2684,7 @@ compute_display_chunk (GdaDataProxy *proxy)
{
DisplayChunk *ret_chunk = NULL;
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (proxy->priv->filtered_rows) {
/* REM: when there is a filter applied, the new rows are mixed with the
* existing ones => no need to treat them appart
@@ -2792,7 +2790,7 @@ compute_display_chunk (GdaDataProxy *proxy)
}
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return ret_chunk;
}
@@ -2807,7 +2805,7 @@ adjust_displayed_chunk (GdaDataProxy *proxy)
{
g_return_if_fail (proxy->priv->model);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/*
* Stop idle adding of rows if necessary
@@ -2824,7 +2822,7 @@ adjust_displayed_chunk (GdaDataProxy *proxy)
}
proxy->priv->chunk_to = compute_display_chunk (proxy);
if (!proxy->priv->chunk_to) {
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return; /* nothing to do */
}
@@ -2874,7 +2872,7 @@ adjust_displayed_chunk (GdaDataProxy *proxy)
}
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
/**
@@ -2896,7 +2894,7 @@ gda_data_proxy_apply_all_changes (GdaDataProxy *proxy, GError **error)
g_return_val_if_fail (GDA_IS_DATA_PROXY (proxy), FALSE);
g_return_val_if_fail (proxy->priv, FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -2909,7 +2907,7 @@ gda_data_proxy_apply_all_changes (GdaDataProxy *proxy, GError **error)
gda_data_model_send_hint (proxy->priv->model, GDA_DATA_MODEL_HINT_END_BATCH_UPDATE, NULL);
adjust_displayed_chunk (proxy);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return allok;
}
@@ -2931,7 +2929,7 @@ gda_data_proxy_cancel_all_changes (GdaDataProxy *proxy)
g_return_val_if_fail (GDA_IS_DATA_PROXY (proxy), FALSE);
g_return_val_if_fail (proxy->priv, FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -2999,7 +2997,7 @@ gda_data_proxy_cancel_all_changes (GdaDataProxy *proxy)
gda_data_model_row_updated ((GdaDataModel *) proxy, proxy_row);
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return TRUE;
}
@@ -3211,13 +3209,13 @@ gda_data_proxy_set_filter_expr (GdaDataProxy *proxy, const gchar *filter_expr, G
g_return_val_if_fail (GDA_IS_DATA_PROXY (proxy), FALSE);
g_return_val_if_fail (proxy->priv, FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (!filter_expr) {
if (proxy->priv->filter_stmt)
g_object_unref (proxy->priv->filter_stmt);
proxy->priv->filter_stmt = NULL;
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
gboolean retval = apply_filter_statement (proxy, error);
return retval;
@@ -3254,7 +3252,7 @@ gda_data_proxy_set_filter_expr (GdaDataProxy *proxy, const gchar *filter_expr, G
g_object_unref (stmt);
proxy->priv->force_direct_mapping = FALSE;
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return FALSE;
}
@@ -3262,7 +3260,7 @@ gda_data_proxy_set_filter_expr (GdaDataProxy *proxy, const gchar *filter_expr, G
g_object_unref (proxy->priv->filter_stmt);
proxy->priv->filter_stmt = stmt;
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
gboolean retval = apply_filter_statement (proxy, error);
return retval;
}
@@ -3286,7 +3284,7 @@ gda_data_proxy_set_ordering_column (GdaDataProxy *proxy, gint col, GError **erro
g_return_val_if_fail (col >= 0, FALSE);
g_return_val_if_fail (col < gda_data_model_get_n_columns ((GdaDataModel*) proxy), FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (proxy->priv->filter_stmt) {
GdaSqlStatement *sqlst;
@@ -3357,7 +3355,7 @@ gda_data_proxy_set_ordering_column (GdaDataProxy *proxy, gint col, GError **erro
g_free (str);
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return retval;
}
@@ -3395,14 +3393,14 @@ gda_data_proxy_get_filtered_n_rows (GdaDataProxy *proxy)
g_return_val_if_fail (GDA_IS_DATA_PROXY (proxy), -1);
g_return_val_if_fail (proxy->priv, -1);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (! proxy->priv->filtered_rows) {
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return -1;
}
else {
gint n = gda_data_model_get_n_rows (proxy->priv->filtered_rows);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return n;
}
}
@@ -3419,7 +3417,7 @@ gda_data_proxy_get_n_rows (GdaDataModel *model)
proxy = GDA_DATA_PROXY (model);
g_return_val_if_fail (proxy->priv, -1);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (proxy->priv->chunk && !proxy->priv->force_direct_mapping)
nbrows = proxy->priv->chunk->mapping->len;
@@ -3438,7 +3436,7 @@ gda_data_proxy_get_n_rows (GdaDataModel *model)
if (!proxy->priv->force_direct_mapping && proxy->priv->add_null_entry)
nbrows += 1;
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return nbrows;
}
@@ -3553,10 +3551,10 @@ gda_data_proxy_describe_column (GdaDataModel *model, gint col)
proxy = GDA_DATA_PROXY (model);
g_return_val_if_fail (proxy->priv, NULL);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (!proxy->priv->columns)
create_columns (proxy);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
if ((col < 0) || (col >= 2 * proxy->priv->model_nb_cols)) {
g_warning (_("Column %d out of range (0-%d)"), col,
gda_data_model_get_n_columns (model) - 1);
@@ -3579,12 +3577,12 @@ gda_data_proxy_get_value_at (GdaDataModel *model, gint column, gint proxy_row, G
g_return_val_if_fail (proxy->priv, NULL);
g_return_val_if_fail (proxy_row >= 0, NULL);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if ((proxy_row == 0) && proxy->priv->add_null_entry) {
if (!null_value)
null_value = gda_value_new_null ();
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return null_value;
}
@@ -3639,7 +3637,7 @@ gda_data_proxy_get_value_at (GdaDataModel *model, gint column, gint proxy_row, G
}
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return retval;
}
@@ -3677,14 +3675,14 @@ gda_data_proxy_get_value_at (GdaDataModel *model, gint column, gint proxy_row, G
}
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return retval;
}
g_set_error (error, GDA_DATA_MODEL_ERROR, GDA_DATA_MODEL_COLUMN_OUT_OF_RANGE_ERROR,
_("Column %d out of range (0-%d)"), column, 2 *proxy->priv->model_nb_cols - 1);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return NULL;
}
@@ -3698,9 +3696,9 @@ gda_data_proxy_get_attributes_at (GdaDataModel *model, gint col, gint row)
proxy = (GdaDataProxy*) model;
g_return_val_if_fail (proxy->priv, FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
attrs = gda_data_proxy_get_value_attributes ((GdaDataProxy *) model, row, col);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return attrs;
}
@@ -3717,7 +3715,7 @@ gda_data_proxy_find_row_from_values (GdaDataModel *model, GSList *values, gint *
g_return_val_if_fail (proxy->priv, FALSE);
g_return_val_if_fail (values, FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -3764,7 +3762,7 @@ gda_data_proxy_find_row_from_values (GdaDataModel *model, GSList *values, gint *
}
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return found ? proxy_row : -1;
}
@@ -3778,9 +3776,9 @@ gda_data_proxy_get_access_flags (GdaDataModel *model)
if (proxy->priv->model) {
GdaDataModelAccessFlags flags;
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
flags = gda_data_model_get_access_flags (proxy->priv->model) | GDA_DATA_MODEL_ACCESS_RANDOM;
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return flags;
}
else
@@ -3799,7 +3797,7 @@ gda_data_proxy_set_value_at (GdaDataModel *model, gint col, gint proxy_row, cons
g_return_val_if_fail (proxy_row >= 0, FALSE);
g_return_val_if_fail (value, FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -3807,7 +3805,7 @@ gda_data_proxy_set_value_at (GdaDataModel *model, gint col, gint proxy_row, cons
if ((proxy_row == 0) && proxy->priv->add_null_entry) {
g_set_error (error, GDA_DATA_PROXY_ERROR, GDA_DATA_PROXY_READ_ONLY_ROW,
"%s", _("The first row is an empty row artificially prepended and cannot be
altered"));
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return FALSE;
}
@@ -3824,7 +3822,7 @@ gda_data_proxy_set_value_at (GdaDataModel *model, gint col, gint proxy_row, cons
GdaValueAttribute attrs;
attrs = gda_data_proxy_get_value_attributes (proxy, proxy_row, col);
if (attrs & GDA_VALUE_ATTR_NO_MODIF) {
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return FALSE;
}
else {
@@ -3834,7 +3832,7 @@ gda_data_proxy_set_value_at (GdaDataModel *model, gint col, gint proxy_row, cons
if ((G_VALUE_TYPE (value) != GDA_TYPE_NULL) &&
(exptype != GDA_TYPE_NULL) &&
(exptype != G_VALUE_TYPE (value))) {
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
g_warning (_("Wrong value type: expected '%s' and got '%s'"),
g_type_name (exptype),
g_type_name (G_VALUE_TYPE (value)));
@@ -3845,7 +3843,7 @@ gda_data_proxy_set_value_at (GdaDataModel *model, gint col, gint proxy_row, cons
else if ((G_VALUE_TYPE (cmp_value) != GDA_TYPE_NULL) &&
(G_VALUE_TYPE (value) != GDA_TYPE_NULL) &&
(G_VALUE_TYPE (value) != G_VALUE_TYPE (cmp_value))) {
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
g_warning (_("Wrong value type: expected '%s' and got '%s'"),
g_type_name (G_VALUE_TYPE (cmp_value)),
g_type_name (G_VALUE_TYPE (value)));
@@ -3853,7 +3851,7 @@ gda_data_proxy_set_value_at (GdaDataModel *model, gint col, gint proxy_row, cons
}
else if (! gda_value_compare ((GValue *) value, (GValue *) cmp_value)) {
/* nothing to do: values are equal */
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return TRUE;
}
@@ -3935,11 +3933,11 @@ gda_data_proxy_set_value_at (GdaDataModel *model, gint col, gint proxy_row, cons
else {
g_set_error (error, GDA_DATA_PROXY_ERROR, GDA_DATA_PROXY_READ_ONLY_VALUE,
_("Trying to change read-only column: %d"), col);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return FALSE;
}
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return TRUE;
}
@@ -3985,7 +3983,7 @@ gda_data_proxy_set_values (GdaDataModel *model, gint row, GList *values, GError
if (err)
return FALSE;
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* temporary disable changes notification */
notify_changes = proxy->priv->notify_changes;
@@ -4004,7 +4002,7 @@ gda_data_proxy_set_values (GdaDataModel *model, gint row, GList *values, GError
/* at least one successful value change occurred */
gda_data_model_row_updated (model, row);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return !err;
}
@@ -4019,7 +4017,7 @@ gda_data_proxy_append_values (GdaDataModel *model, const GList *values, GError *
proxy = GDA_DATA_PROXY (model);
g_return_val_if_fail (proxy->priv, -1);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
/* ensure that there is no sync to be done */
ensure_chunk_sync (proxy);
@@ -4032,14 +4030,14 @@ gda_data_proxy_append_values (GdaDataModel *model, const GList *values, GError *
if (! gda_data_proxy_set_values (model, newrow, (GList *) values, error)) {
gda_data_proxy_remove_row (model, newrow, NULL);
proxy->priv->notify_changes = notify_changes;
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return -1;
}
else {
proxy->priv->notify_changes = notify_changes;
if (proxy->priv->notify_changes)
gda_data_model_row_inserted (model, newrow);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return newrow;
}
}
@@ -4053,9 +4051,9 @@ gda_data_proxy_append_row (GdaDataModel *model, G_GNUC_UNUSED GError **error)
proxy = GDA_DATA_PROXY (model);
g_return_val_if_fail (proxy->priv, -1);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
i = gda_data_proxy_append (proxy);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return i;
}
@@ -4067,17 +4065,17 @@ gda_data_proxy_remove_row (GdaDataModel *model, gint row, GError **error)
proxy = GDA_DATA_PROXY (model);
g_return_val_if_fail (proxy->priv, FALSE);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
if (proxy->priv->add_null_entry && row == 0) {
g_set_error (error, GDA_DATA_PROXY_ERROR, GDA_DATA_PROXY_READ_ONLY_ROW,
"%s", _("The first row is an empty row artificially prepended and cannot be
removed"));
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return FALSE;
}
gda_data_proxy_delete (proxy, row);
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
return TRUE;
}
@@ -4089,9 +4087,9 @@ gda_data_proxy_set_notify (GdaDataModel *model, gboolean do_notify_changes)
proxy = GDA_DATA_PROXY (model);
g_return_if_fail (proxy->priv);
- gda_mutex_lock (proxy->priv->mutex);
+ g_rec_mutex_lock (& (proxy->priv->mutex));
proxy->priv->notify_changes = do_notify_changes;
- gda_mutex_unlock (proxy->priv->mutex);
+ g_rec_mutex_unlock (& (proxy->priv->mutex));
}
static gboolean
diff --git a/libgda/gda-holder.c b/libgda/gda-holder.c
index 0778322..3ce50a1 100644
--- a/libgda/gda-holder.c
+++ b/libgda/gda-holder.c
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2008 Massimo Cora <maxcvs email it>
* Copyright (C) 2008 - 2011 Murray Cumming <murrayc murrayc com>
- * Copyright (C) 2008 - 2013 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2008 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2009 Bas Driessen <bas driessen xobas com>
* Copyright (C) 2010 David King <davidk openismus com>
* Copyright (C) 2010 Jonh Wendell <jwendell gnome org>
@@ -121,7 +121,7 @@ struct _GdaHolderPrivate
GdaDataModel *source_model;
gint source_col;
- GdaMutex *mutex;
+ GRecMutex mutex;
gboolean validate_changes;
};
@@ -365,7 +365,7 @@ gda_holder_init (GdaHolder *holder)
holder->priv->source_model = NULL;
holder->priv->source_col = 0;
- holder->priv->mutex = gda_mutex_new ();
+ g_rec_mutex_init (& (holder->priv->mutex));
holder->priv->validate_changes = TRUE;
}
@@ -603,8 +603,7 @@ gda_holder_finalize (GObject * object)
holder = GDA_HOLDER (object);
if (holder->priv) {
g_free (holder->priv->id);
-
- gda_mutex_free (holder->priv->mutex);
+ g_rec_mutex_clear (& (holder->priv->mutex));
g_free (holder->priv);
holder->priv = NULL;
@@ -2063,19 +2062,19 @@ static void
gda_holder_lock (GdaLockable *lockable)
{
GdaHolder *holder = (GdaHolder *) lockable;
- gda_mutex_lock (holder->priv->mutex);
+ g_rec_mutex_lock (& (holder->priv->mutex));
}
static gboolean
gda_holder_trylock (GdaLockable *lockable)
{
GdaHolder *holder = (GdaHolder *) lockable;
- return gda_mutex_trylock (holder->priv->mutex);
+ return g_rec_mutex_trylock (& (holder->priv->mutex));
}
static void
gda_holder_unlock (GdaLockable *lockable)
{
GdaHolder *holder = (GdaHolder *) lockable;
- gda_mutex_unlock (holder->priv->mutex);
+ g_rec_mutex_unlock (& (holder->priv->mutex));
}
diff --git a/libgda/gda-lockable.h b/libgda/gda-lockable.h
index 2792cb8..60474c6 100644
--- a/libgda/gda-lockable.h
+++ b/libgda/gda-lockable.h
@@ -47,7 +47,7 @@ struct _GdaLockableIface {
* @short_description: Interface for locking objects in a multi threaded environment
* @title: GdaLockable
* @stability: Stable
- * @see_also: #GdaMutex and #GMutex
+ * @see_also: #GRecMutex and #GMutex
*
* This interface is implemented by objects which are thread safe (ie. can be used by several threads at
* the same time). Before using an object from a thread, one has to call gda_lockable_lock() or
diff --git a/libgda/gda-meta-store.c b/libgda/gda-meta-store.c
index 2f36201..a3aefbd 100644
--- a/libgda/gda-meta-store.c
+++ b/libgda/gda-meta-store.c
@@ -60,7 +60,6 @@
#include <libgda/gda-connection.h>
#include <libgda/gda-connection-internal.h>
#include <libgda/gda-lockable.h>
-#include <libgda/gda-mutex.h>
#include <libgda/gda-connection-sqlite.h>
#include "gda-types.h"
#include "gda-data-meta-wrapper.h"
@@ -468,7 +467,7 @@ struct _GdaMetaStorePrivate {
gint current_extract_stmt;
GHashTable *extract_stmt_hash; /* key = a SQL string, value = a #GdaStatement */
- GdaMutex *mutex;
+ GRecMutex mutex;
};
static void db_object_free (DbObject *dbobj);
@@ -766,7 +765,7 @@ gda_meta_store_init (GdaMetaStore *store)
store->priv->current_extract_stmt = 0;
store->priv->extract_stmt_hash = NULL;
- store->priv->mutex = gda_mutex_new ();
+ g_rec_mutex_init (& (store->priv->mutex));
}
static GObject *
@@ -942,7 +941,7 @@ gda_meta_store_dispose (GObject *object)
store->priv->cnc = NULL;
}
- gda_mutex_free (store->priv->mutex);
+ g_rec_mutex_clear (& (store->priv->mutex));
}
/* parent class */
@@ -2749,7 +2748,7 @@ gda_meta_store_extract (GdaMetaStore *store, const gchar *select_sql, GError **e
return NULL;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
if ((store->priv->max_extract_stmt > 0) && !store->priv->extract_stmt_hash)
store->priv->extract_stmt_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
g_object_unref);
@@ -2766,14 +2765,14 @@ gda_meta_store_extract (GdaMetaStore *store, const gchar *select_sql, GError **e
klass = (GdaMetaStoreClass *) G_OBJECT_GET_CLASS (store);
stmt = gda_sql_parser_parse_string (klass->cpriv->parser, select_sql, &remain, error);
if (!stmt) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (remain) {
g_set_error (error, GDA_META_STORE_ERROR, GDA_META_STORE_EXTRACT_SQL_ERROR,
"%s", _("More than one SQL statement"));
g_object_unref (stmt);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -2786,7 +2785,7 @@ gda_meta_store_extract (GdaMetaStore *store, const gchar *select_sql, GError **e
/* parameters */
if (!gda_statement_get_parameters (stmt, ¶ms, error)) {
g_object_unref (stmt);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (params) {
@@ -2807,7 +2806,7 @@ gda_meta_store_extract (GdaMetaStore *store, const gchar *select_sql, GError **e
g_object_unref (params);
va_end (ap);
g_slist_free (params_set);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
params_set = g_slist_prepend (params_set, h);
@@ -2829,7 +2828,7 @@ gda_meta_store_extract (GdaMetaStore *store, const gchar *select_sql, GError **e
if (params)
g_object_unref (params);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return model;
}
@@ -2871,7 +2870,7 @@ gda_meta_store_extract_v (GdaMetaStore *store, const gchar *select_sql, GHashTab
return NULL;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
if ((store->priv->max_extract_stmt > 0) && !store->priv->extract_stmt_hash)
store->priv->extract_stmt_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
g_object_unref);
@@ -2888,14 +2887,14 @@ gda_meta_store_extract_v (GdaMetaStore *store, const gchar *select_sql, GHashTab
klass = (GdaMetaStoreClass *) G_OBJECT_GET_CLASS (store);
stmt = gda_sql_parser_parse_string (klass->cpriv->parser, select_sql, &remain, error);
if (!stmt) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (remain) {
g_set_error (error, GDA_META_STORE_ERROR, GDA_META_STORE_EXTRACT_SQL_ERROR,
"%s", _("More than one SQL statement"));
g_object_unref (stmt);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -2908,7 +2907,7 @@ gda_meta_store_extract_v (GdaMetaStore *store, const gchar *select_sql, GHashTab
/* parameters */
if (!gda_statement_get_parameters (stmt, ¶ms, error)) {
g_object_unref (stmt);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (params) {
@@ -2926,7 +2925,7 @@ gda_meta_store_extract_v (GdaMetaStore *store, const gchar *select_sql, GHashTab
if (!gda_holder_set_value (h, value, error)) {
g_object_unref (stmt);
g_object_unref (params);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
params_set = g_slist_prepend (params_set, h);
@@ -2947,7 +2946,7 @@ gda_meta_store_extract_v (GdaMetaStore *store, const gchar *select_sql, GHashTab
if (params)
g_object_unref (params);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return model;
}
@@ -3114,13 +3113,13 @@ gda_meta_store_modify_v (GdaMetaStore *store, const gchar *table_name,
g_return_val_if_fail (gda_connection_is_opened (store->priv->cnc), FALSE);
g_return_val_if_fail (!new_data || GDA_IS_DATA_MODEL (new_data), FALSE);
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
/* get the correct TableInfo */
prep = prepare_tables_infos (store, &schema_set, &custom_set, &with_cond, table_name,
condition, error, nvalues, value_names, values);
if (!prep) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
@@ -3138,7 +3137,7 @@ gda_meta_store_modify_v (GdaMetaStore *store, const gchar *table_name,
GDA_STATEMENT_MODEL_RANDOM_ACCESS,
schema_set->type_cols_array, error);
if (!current) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
current_n_rows = gda_data_model_get_n_rows (current);
@@ -3165,7 +3164,7 @@ gda_meta_store_modify_v (GdaMetaStore *store, const gchar *table_name,
if (gda_connection_statement_execute_non_select (store->priv->cnc,
schema_set->delete_all, NULL,
NULL, error) == -1) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
}
@@ -3488,7 +3487,7 @@ out:
#endif
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return retval;
}
@@ -3687,23 +3686,23 @@ _gda_meta_store_begin_data_reset (GdaMetaStore *store, GError **error)
if (store->priv->override_mode)
return TRUE;
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
if (! gda_connection_get_transaction_status (store->priv->cnc)) {
if (!gda_connection_begin_transaction (store->priv->cnc, NULL,
GDA_TRANSACTION_ISOLATION_UNKNOWN, error)) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
}
else {
g_set_error (error, GDA_META_STORE_ERROR, GDA_META_STORE_TRANSACTION_ALREADY_STARTED_ERROR,
"%s", _("A transaction has already been started"));
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
store->priv->override_mode = TRUE;
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return TRUE;
}
@@ -3727,15 +3726,15 @@ _gda_meta_store_cancel_data_reset (GdaMetaStore *store, GError **error)
return FALSE;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
if (!store->priv->override_mode) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return TRUE;
}
store->priv->override_mode = FALSE;
retval = gda_connection_rollback_transaction (store->priv->cnc, NULL, error);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return retval;
}
@@ -3758,20 +3757,20 @@ _gda_meta_store_finish_data_reset (GdaMetaStore *store, GError **error)
return FALSE;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
if (!store->priv->override_mode) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return TRUE;
}
store->priv->override_mode = FALSE;
if (!gda_connection_commit_transaction (store->priv->cnc, NULL, error)) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
else {
g_signal_emit (store, gda_meta_store_signals[META_RESET], 0);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return TRUE;
}
}
@@ -3817,17 +3816,17 @@ gda_meta_store_create_modify_data_model (GdaMetaStore *store, const gchar *table
g_return_val_if_fail (GDA_IS_META_STORE (store), FALSE);
g_return_val_if_fail (table_name && *table_name, FALSE);
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
dbobj = g_hash_table_lookup (store->priv->p_db_objects_hash, table_name);
if (!dbobj) {
g_warning ("Table '%s' is not known by the GdaMetaStore", table_name);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (dbobj->obj_type != GDA_SERVER_OPERATION_CREATE_TABLE) {
g_warning ("Table '%s' is not a database table in the GdaMetaStore", table_name);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -3842,7 +3841,7 @@ gda_meta_store_create_modify_data_model (GdaMetaStore *store, const gchar *table
gda_column_set_name (col, tcol->column_name);
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return model;
}
@@ -3864,7 +3863,7 @@ gda_meta_store_schema_get_all_tables (GdaMetaStore *store)
g_return_val_if_fail (GDA_IS_META_STORE (store), NULL);
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
klass = (GdaMetaStoreClass *) G_OBJECT_GET_CLASS (store);
for (ret = NULL, list = klass->cpriv->db_objects; list; list = list->next) {
@@ -3878,7 +3877,7 @@ gda_meta_store_schema_get_all_tables (GdaMetaStore *store)
ret = g_slist_prepend (ret, dbobj->obj_name);
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return g_slist_reverse (ret);
}
@@ -3905,10 +3904,10 @@ gda_meta_store_schema_get_depend_tables (GdaMetaStore *store, const gchar *table
g_return_val_if_fail (GDA_IS_META_STORE (store), NULL);
g_return_val_if_fail (table_name && *table_name, NULL);
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
dbo = g_hash_table_lookup (store->priv->p_db_objects_hash, table_name);
if (!dbo) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -3918,7 +3917,7 @@ gda_meta_store_schema_get_depend_tables (GdaMetaStore *store, const gchar *table
ret = g_slist_prepend (ret, dbobj->obj_name);
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return g_slist_reverse (ret);
}
@@ -3947,11 +3946,11 @@ gda_meta_store_schema_get_structure (GdaMetaStore *store, GError **error)
return NULL;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
/* make sure the private connection's meta store is up to date */
if (! gda_connection_update_meta_store (store->priv->cnc, NULL, error)) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -3961,7 +3960,7 @@ gda_meta_store_schema_get_structure (GdaMetaStore *store, GError **error)
"SELECT table_catalog, table_schema, table_name FROM _tables",
error, NULL);
if (!model) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -3972,23 +3971,23 @@ gda_meta_store_schema_get_structure (GdaMetaStore *store, GError **error)
const GValue *cv0, *cv1, *cv2;
cv0 = gda_data_model_get_value_at (model, 0, i, error);
if (!cv0) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
cv1 = gda_data_model_get_value_at (model, 1, i, error);
if (!cv1) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
cv2 = gda_data_model_get_value_at (model, 2, i, error);
if (!cv2) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (!gda_meta_struct_complement (mstruct, GDA_META_DB_UNKNOWN, cv0, cv1, cv2, error)) {
g_object_unref (mstruct);
g_object_unref (model);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
}
@@ -4031,7 +4030,7 @@ gda_meta_store_schema_get_structure (GdaMetaStore *store, GError **error)
}
g_slist_free (all_db_obj_list);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return mstruct;
}
@@ -4070,7 +4069,7 @@ gda_meta_store_get_attribute_value (GdaMetaStore *store, const gchar *att_name,
return FALSE;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
*att_value = NULL;
g_value_set_string ((value = gda_value_new (G_TYPE_STRING)), att_name);
@@ -4078,7 +4077,7 @@ gda_meta_store_get_attribute_value (GdaMetaStore *store, const gchar *att_name,
"n", value, NULL);
gda_value_free (value);
if (!model) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
nrows = gda_data_model_get_n_rows (model);
@@ -4092,7 +4091,7 @@ gda_meta_store_get_attribute_value (GdaMetaStore *store, const gchar *att_name,
else {
value = (GValue*) gda_data_model_get_value_at (model, 0, 0, error);
if (!value) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
if (G_VALUE_TYPE (value) == G_TYPE_STRING) {
@@ -4101,10 +4100,10 @@ gda_meta_store_get_attribute_value (GdaMetaStore *store, const gchar *att_name,
if (val)
*att_value = g_strdup (val);
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return TRUE;
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
@@ -4138,21 +4137,21 @@ gda_meta_store_set_attribute_value (GdaMetaStore *store, const gchar *att_name,
return FALSE;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
klass = (GdaMetaStoreClass *) G_OBJECT_GET_CLASS (store);
g_mutex_lock (&set_mutex);
if (!set) {
if (!gda_statement_get_parameters (klass->cpriv->prep_stmts [STMT_SET_ATT_VALUE], &set,
error)) {
g_mutex_unlock (&set_mutex);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
}
g_mutex_unlock (&set_mutex);
if (!gda_set_set_holder_value (set, error, "name", att_name)) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
@@ -4183,13 +4182,13 @@ gda_meta_store_set_attribute_value (GdaMetaStore *store, const gchar *att_name,
}
if (started_transaction)
gda_connection_commit_transaction (store->priv->cnc, NULL, NULL);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return TRUE;
onerror:
if (started_transaction)
gda_connection_rollback_transaction (store->priv->cnc, NULL, NULL);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
@@ -4282,7 +4281,7 @@ gda_meta_store_schema_add_custom_object (GdaMetaStore *store, const gchar *xml_d
}
node = xmlDocGetRootElement (doc);
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
klass = (GdaMetaStoreClass *) G_OBJECT_GET_CLASS (store);
@@ -4419,7 +4418,7 @@ gda_meta_store_schema_add_custom_object (GdaMetaStore *store, const gchar *xml_d
}
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return TRUE;
onerror:
@@ -4439,7 +4438,7 @@ gda_meta_store_schema_add_custom_object (GdaMetaStore *store, const gchar *xml_d
}
g_slist_free (current_objects);
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
g_slist_free (pre_p_db_objects);
if (pstore)
g_object_unref (pstore);
@@ -4470,9 +4469,9 @@ gda_meta_store_schema_remove_custom_object (GdaMetaStore *store, const gchar *ob
return FALSE;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
TO_IMPLEMENT;
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return FALSE;
}
@@ -4628,25 +4627,25 @@ _gda_meta_store_schema_get_upstream_contexts (GdaMetaStore *store, GdaMetaContex
return NULL;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
/* find the associated DbObject */
dbo = g_hash_table_lookup (store->priv->p_db_objects_hash, context->table_name);
if (!dbo) {
g_set_error (error, GDA_META_STORE_ERROR, GDA_META_STORE_SCHEMA_OBJECT_NOT_FOUND_ERROR,
_("Unknown database object '%s'"), context->table_name);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (dbo->obj_type != GDA_SERVER_OPERATION_CREATE_TABLE) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
tinfo = TABLE_INFO (dbo);
if (!tinfo->fk_list) {
/* this is not an error, just that there are no dependency */
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -4707,7 +4706,7 @@ _gda_meta_store_schema_get_upstream_contexts (GdaMetaStore *store, GdaMetaContex
}
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return g_slist_reverse (retlist);
}
@@ -4731,25 +4730,25 @@ _gda_meta_store_schema_get_downstream_contexts (GdaMetaStore *store, GdaMetaCont
return NULL;
}
- gda_mutex_lock (store->priv->mutex);
+ g_rec_mutex_lock (& (store->priv->mutex));
/* find the associated DbObject */
dbo = g_hash_table_lookup (store->priv->p_db_objects_hash, context->table_name);
if (!dbo) {
g_set_error (error, GDA_META_STORE_ERROR, GDA_META_STORE_SCHEMA_OBJECT_NOT_FOUND_ERROR,
_("Unknown database object '%s'"), context->table_name);
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
if (dbo->obj_type != GDA_SERVER_OPERATION_CREATE_TABLE) {
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
tinfo = TABLE_INFO (dbo);
if (!tinfo->reverse_fk_list) {
/* this is not an error, just that there are no dependency */
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return NULL;
}
@@ -4765,7 +4764,7 @@ _gda_meta_store_schema_get_downstream_contexts (GdaMetaStore *store, GdaMetaCont
retlist = g_slist_prepend (retlist, ct);
}
- gda_mutex_unlock (store->priv->mutex);
+ g_rec_mutex_unlock (& (store->priv->mutex));
return g_slist_reverse (retlist);
}
diff --git a/libgda/libgda.h.in b/libgda/libgda.h.in
index 980a08b..6b860ed 100644
--- a/libgda/libgda.h.in
+++ b/libgda/libgda.h.in
@@ -88,8 +88,6 @@
#include <libgda/gda-meta-store.h>
-#include <libgda/gda-mutex.h>
-
G_BEGIN_DECLS
/**
diff --git a/libgda/libgda.symbols b/libgda/libgda.symbols
index 1d70da2..aef05d4 100644
--- a/libgda/libgda.symbols
+++ b/libgda/libgda.symbols
@@ -487,11 +487,6 @@
gda_meta_table_column_foreach_attribute
gda_meta_table_column_get_attribute
gda_meta_table_column_set_attribute
- gda_mutex_free
- gda_mutex_lock
- gda_mutex_new
- gda_mutex_trylock
- gda_mutex_unlock
gda_null_get_type
gda_numeric_copy
gda_numeric_free
diff --git a/libgda/sql-parser/gda-sql-parser-private.h b/libgda/sql-parser/gda-sql-parser-private.h
index 5b9ad48..a391dae 100644
--- a/libgda/sql-parser/gda-sql-parser-private.h
+++ b/libgda/sql-parser/gda-sql-parser-private.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2008 - 2014 Vivien Malerba <malerba gnome-db org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -24,7 +24,6 @@
#include <glib-object.h>
#include "gda-sql-parser.h"
#include "gda-statement-struct-pspec.h"
-#include <libgda/gda-mutex.h>
G_BEGIN_DECLS
@@ -43,9 +42,9 @@ typedef struct {
} TokenizerContext;
struct _GdaSqlParserPrivate {
- GdaMutex *mutex;
- gchar *sql;
- GSList *parsed_statements;
+ GRecMutex mutex;
+ gchar *sql;
+ GSList *parsed_statements;
/* parser */
void *lemon_delimiter;
diff --git a/libgda/sql-parser/gda-sql-parser.c b/libgda/sql-parser/gda-sql-parser.c
index 37af1fa..6245414 100644
--- a/libgda/sql-parser/gda-sql-parser.c
+++ b/libgda/sql-parser/gda-sql-parser.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008 - 2011 Murray Cumming <murrayc murrayc com>
- * Copyright (C) 2008 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2008 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2009 Bas Driessen <bas driessen xobas com>
* Copyright (C) 2010 David King <davidk openismus com>
* Copyright (C) 2010 Jonh Wendell <jwendell gnome org>
@@ -235,7 +235,7 @@ gda_sql_parser_init (GdaSqlParser *parser)
klass = (GdaSqlParserClass*) G_OBJECT_GET_CLASS (parser);
parser->priv = g_new0 (GdaSqlParserPrivate, 1);
- parser->priv->mutex = gda_mutex_new ();
+ g_rec_mutex_init (& (parser->priv->mutex));
parser->priv->flavour = GDA_SQL_PARSER_FLAVOUR_STANDARD;
if (klass->delim_alloc)
parser->priv->lemon_delimiter = klass->delim_alloc ((void*(*)(size_t)) g_malloc);
@@ -327,7 +327,7 @@ gda_sql_parser_finalize (GObject *object)
g_array_free (parser->priv->passed_tokens, TRUE);
- gda_mutex_free (parser->priv->mutex);
+ g_rec_mutex_clear (& (parser->priv->mutex));
g_free (parser->priv);
parser->priv = NULL;
}
@@ -347,7 +347,7 @@ gda_sql_parser_set_property (GObject *object,
parser = GDA_SQL_PARSER (object);
if (parser->priv) {
- gda_mutex_lock (parser->priv->mutex);
+ g_rec_mutex_lock (& (parser->priv->mutex));
switch (param_id) {
case PROP_FLAVOUR:
parser->priv->flavour = g_value_get_int (value);
@@ -384,7 +384,7 @@ gda_sql_parser_set_property (GObject *object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
- gda_mutex_unlock (parser->priv->mutex);
+ g_rec_mutex_unlock (& (parser->priv->mutex));
}
}
@@ -454,7 +454,7 @@ gda_sql_parser_parse_string (GdaSqlParser *parser, const gchar *sql, const gchar
if (!sql)
return NULL;
- gda_mutex_lock (parser->priv->mutex);
+ g_rec_mutex_lock (& (parser->priv->mutex));
if (remain)
*remain = NULL;
@@ -652,7 +652,7 @@ gda_sql_parser_parse_string (GdaSqlParser *parser, const gchar *sql, const gchar
parser->priv->mode = parse_mode;
- gda_mutex_unlock (parser->priv->mutex);
+ g_rec_mutex_unlock (& (parser->priv->mutex));
return stmt;
}
@@ -699,7 +699,7 @@ gda_sql_parser_parse_string_as_batch (GdaSqlParser *parser, const gchar *sql, co
if (!sql)
return batch;
- gda_mutex_lock (parser->priv->mutex);
+ g_rec_mutex_lock (& (parser->priv->mutex));
int_sql = sql;
while (int_sql && allok) {
@@ -743,7 +743,7 @@ gda_sql_parser_parse_string_as_batch (GdaSqlParser *parser, const gchar *sql, co
batch = NULL;
}
- gda_mutex_unlock (parser->priv->mutex);
+ g_rec_mutex_unlock (& (parser->priv->mutex));
return batch;
}
@@ -1699,7 +1699,7 @@ gda_sql_parser_lock (GdaLockable *lockable)
GdaSqlParser *parser = (GdaSqlParser *) lockable;
g_return_if_fail (parser->priv);
- gda_mutex_lock (parser->priv->mutex);
+ g_rec_mutex_lock (& (parser->priv->mutex));
}
static gboolean
@@ -1708,7 +1708,7 @@ gda_sql_parser_trylock (GdaLockable *lockable)
GdaSqlParser *parser = (GdaSqlParser *) lockable;
g_return_val_if_fail (parser->priv, FALSE);
- return gda_mutex_trylock (parser->priv->mutex);
+ return g_rec_mutex_trylock (& (parser->priv->mutex));
}
static void
@@ -1717,5 +1717,5 @@ gda_sql_parser_unlock (GdaLockable *lockable)
GdaSqlParser *parser = (GdaSqlParser *) lockable;
g_return_if_fail (parser->priv);
- gda_mutex_unlock (parser->priv->mutex);
+ g_rec_mutex_unlock (& (parser->priv->mutex));
}
diff --git a/providers/web/gda-web-provider.c b/providers/web/gda-web-provider.c
index a604570..aea1fd7 100644
--- a/providers/web/gda-web-provider.c
+++ b/providers/web/gda-web-provider.c
@@ -381,7 +381,7 @@ gda_web_provider_open_connection (GdaServerProvider *provider, GdaConnection *cn
GString *server_url;
cdata = g_new0 (WebConnectionData, 1);
- cdata->mutex = gda_mutex_new ();
+ g_rec_mutex_init (& (cdata->mutex));
cdata->server_id = NULL;
cdata->forced_closing = FALSE;
cdata->worker_session = soup_session_sync_new ();
@@ -500,9 +500,9 @@ gda_web_provider_close_connection (GdaServerProvider *provider, GdaConnection *c
if (!cdata)
return FALSE;
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
if (!cdata->forced_closing && cdata->worker_running) {
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
/* send BYE message */
xmlDocPtr doc;
gchar status;
@@ -528,7 +528,7 @@ gda_web_provider_close_connection (GdaServerProvider *provider, GdaConnection *c
xmlFreeDoc (doc);
}
else
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
_gda_web_do_server_cleanup (cnc, cdata);
@@ -1694,10 +1694,10 @@ gda_web_provider_statement_execute (GdaServerProvider *provider, GdaConnection *
}
else if (!strcmp ((gchar*) node->name, "gda_array")) {
GdaDataModel *data_model;
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
data_model = gda_web_recordset_new (cnc, ps, params, model_usage,
col_types, cdata->session_id, node, error);
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
retval = (GObject*) data_model;
if (! gda_web_recordset_store (GDA_WEB_RECORDSET (data_model), node, error)) {
diff --git a/providers/web/gda-web-util.c b/providers/web/gda-web-util.c
index c7454be..8f35026 100644
--- a/providers/web/gda-web-util.c
+++ b/providers/web/gda-web-util.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 - 2013 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2009 - 2014 Vivien Malerba <malerba gnome-db org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -181,9 +181,9 @@ worker_got_chunk_cb (SoupMessage *msg, SoupBuffer *chunk, ThreadData *thdata)
xmlFreeDoc (doc);
}
else {
- gda_mutex_lock (thdata->cdata->mutex);
+ g_rec_mutex_lock (& (thdata->cdata->mutex));
g_assert (thdata->cdata->worker_counter == counter_id);
- gda_mutex_unlock (thdata->cdata->mutex);
+ g_rec_mutex_unlock (& (thdata->cdata->mutex));
xmlFreeDoc (doc);
}
}
@@ -201,7 +201,7 @@ start_worker_in_sub_thread (ThreadData *thdata)
while (runagain) {
GString *real_url;
- gda_mutex_lock (thdata->cdata->mutex);
+ g_rec_mutex_lock (& (thdata->cdata->mutex));
real_url = g_string_new (thdata->cdata->worker_url);
if (thdata->cdata->session_id)
g_string_append_printf (real_url, "?%s", thdata->cdata->session_id);
@@ -210,16 +210,16 @@ start_worker_in_sub_thread (ThreadData *thdata)
thdata->cdata->worker_counter = 1;
else
thdata->cdata->worker_counter ++;
- gda_mutex_unlock (thdata->cdata->mutex);
+ g_rec_mutex_unlock (& (thdata->cdata->mutex));
msg = soup_message_new ("GET", real_url->str);
/*g_print ("=== WORKER Request URL: [%s]\n", real_url->str);*/
if (!msg) {
g_warning (_("Invalid HOST/SCRIPT '%s'"), real_url->str);
g_string_free (real_url, TRUE);
- gda_mutex_lock (thdata->cdata->mutex);
+ g_rec_mutex_lock (& (thdata->cdata->mutex));
thdata->cdata->worker_running = FALSE;
- gda_mutex_unlock (thdata->cdata->mutex);
+ g_rec_mutex_unlock (& (thdata->cdata->mutex));
g_free (thdata);
return NULL;
}
@@ -230,11 +230,11 @@ start_worker_in_sub_thread (ThreadData *thdata)
guint res;
res = soup_session_send_message (thdata->cdata->worker_session, msg);
- gda_mutex_lock (thdata->cdata->mutex);
+ g_rec_mutex_lock (& (thdata->cdata->mutex));
thdata->cdata->worker_running = FALSE;
runagain = thdata->cdata->worker_needed;
runagain = runagain && SOUP_STATUS_IS_SUCCESSFUL (res);
- gda_mutex_unlock (thdata->cdata->mutex);
+ g_rec_mutex_unlock (& (thdata->cdata->mutex));
g_signal_handler_disconnect (msg, sigid);
g_object_unref (msg);
@@ -259,9 +259,9 @@ start_worker (GdaConnection *cnc, WebConnectionData *cdata)
thdata->cdata = cdata;
/* set cdata->worker_running to TRUE to avoid having to add a delay */
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
cdata->worker_running = TRUE;
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
if (! g_thread_new ("web-worker", (GThreadFunc) start_worker_in_sub_thread,
thdata)) {
@@ -273,21 +273,21 @@ start_worker (GdaConnection *cnc, WebConnectionData *cdata)
gint nb_retries;
for (nb_retries = 0; nb_retries < 10; nb_retries++) {
gboolean wait_over;
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
wait_over = !cdata->worker_running || cdata->session_id;
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
if (wait_over)
break;
else
g_usleep (200000);
}
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
if (!cdata->session_id) {
/* there was an error */
cdata->worker_running = FALSE;
}
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
}
/*
@@ -312,17 +312,17 @@ _gda_web_send_message_to_frontend (GdaConnection *cnc, WebConnectionData *cdata,
*out_status_chr = 0;
/* handle the need to run the worker to get an initial sessionID */
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
cdata->worker_needed = TRUE;
if (!cdata->worker_running && !cdata->session_id) {
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
start_worker (cnc, cdata);
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
if (! cdata->worker_running) {
gda_connection_add_event_string (cnc, _("Could not run PHP script on the server"));
cdata->worker_needed = FALSE;
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
return NULL;
}
}
@@ -330,7 +330,7 @@ _gda_web_send_message_to_frontend (GdaConnection *cnc, WebConnectionData *cdata,
/* prepare new message */
g_assert (cdata->session_id);
real_url = g_strdup_printf ("%s?%s&c=%d", cdata->front_url, cdata->session_id, counter++);
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
msg = soup_message_new ("POST", real_url);
if (!msg) {
gda_connection_add_event_string (cnc, _("Invalid HOST/SCRIPT '%s'"), real_url);
@@ -340,7 +340,7 @@ _gda_web_send_message_to_frontend (GdaConnection *cnc, WebConnectionData *cdata,
g_free (real_url);
/* check context */
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
if (gda_connection_get_transaction_status (cnc) &&
(!cdata->worker_running ||
((msgtype == MESSAGE_EXEC) && (cdata->last_exec_counter != cdata->worker_counter)))) {
@@ -351,22 +351,22 @@ _gda_web_send_message_to_frontend (GdaConnection *cnc, WebConnectionData *cdata,
g_object_unref (msg);
gda_connection_internal_reset_transaction_status (cnc);
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
return NULL;
}
if (! cdata->worker_running) {
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
start_worker (cnc, cdata);
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
if (! cdata->worker_running) {
gda_connection_add_event_string (cnc, _("Could not run PHP script on the server"));
g_object_unref (msg);
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
return NULL;
}
}
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
/* finalize and send message */
if (hash_key) {
@@ -393,9 +393,9 @@ _gda_web_send_message_to_frontend (GdaConnection *cnc, WebConnectionData *cdata,
g_object_set (G_OBJECT (cdata->front_session), SOUP_SESSION_TIMEOUT, 20, NULL);
status = soup_session_send_message (cdata->front_session, msg);
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
cdata->worker_needed = FALSE;
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
if (!SOUP_STATUS_IS_SUCCESSFUL (status)) {
gda_connection_add_event_string (cnc, msg->reason_phrase);
@@ -408,10 +408,10 @@ _gda_web_send_message_to_frontend (GdaConnection *cnc, WebConnectionData *cdata,
doc = _gda_web_decode_response (cnc, cdata, msg->response_body, out_status_chr, &counter_id);
g_object_unref (msg);
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
if (msgtype == MESSAGE_EXEC)
cdata->last_exec_counter = counter_id;
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
return doc;
}
@@ -466,13 +466,13 @@ _gda_web_do_server_cleanup (GdaConnection *cnc, WebConnectionData *cdata)
gint nb_retries;
/* wait for worker to finish */
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
for (nb_retries = 0; (nb_retries < 10) && cdata->worker_running; nb_retries ++) {
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
g_usleep (50000);
- gda_mutex_lock (cdata->mutex);
+ g_rec_mutex_lock (& (cdata->mutex));
}
- gda_mutex_unlock (cdata->mutex);
+ g_rec_mutex_unlock (& (cdata->mutex));
real_url = g_strdup_printf ("%s/gda-clean.php?%s", cdata->server_base_url, cdata->session_id);
msg = soup_message_new ("GET", real_url);
@@ -564,8 +564,7 @@ _gda_web_free_cnc_data (WebConnectionData *cdata)
g_free (cdata->server_base_url);
g_free (cdata->front_url);
g_free (cdata->worker_url);
- if (cdata->mutex)
- gda_mutex_free (cdata->mutex);
+ g_rec_mutex_clear (& (cdata->mutex));
if (cdata->worker_session)
g_object_unref (cdata->worker_session);
if (cdata->front_session)
diff --git a/providers/web/gda-web.h b/providers/web/gda-web.h
index 814e7a5..7f7297d 100644
--- a/providers/web/gda-web.h
+++ b/providers/web/gda-web.h
@@ -30,7 +30,6 @@
#define WEB_PROVIDER_NAME "Web"
#include <libsoup/soup.h>
-#include <libgda/gda-mutex.h>
#include <libgda/gda-connection.h>
#include <libgda/gda-connection-private.h>
#include "../reuseable/gda-provider-reuseable.h"
@@ -41,7 +40,7 @@
typedef struct {
GdaServerProviderConnectionData parent;
GdaProviderReuseable *reuseable; /* pointer to GdaProviderReuseable, not inherited! */
- GdaMutex *mutex; /* protected access */
+ GRecMutex mutex; /* protected access */
gchar *server_id; /* PostgreSQL, MySQL, ... */
gchar *server_version; /* native representation */
diff --git a/tests/multi-threading/Makefile.am b/tests/multi-threading/Makefile.am
index b33ab82..48a19d6 100644
--- a/tests/multi-threading/Makefile.am
+++ b/tests/multi-threading/Makefile.am
@@ -7,8 +7,8 @@ AM_CPPFLAGS = \
-DROOT_DIR=\""$(top_srcdir)"\"
TESTS_ENVIRONMENT = GDA_TOP_SRC_DIR="$(abs_top_srcdir)" GDA_TOP_BUILD_DIR="$(abs_top_builddir)"
-TESTS = check_mutex check_parser check_cnc_lock
-check_PROGRAMS = check_mutex check_parser check_cnc_lock
+TESTS = check_parser check_cnc_lock
+check_PROGRAMS = check_parser check_cnc_lock
common_sources = \
../test-errors.h \
@@ -16,11 +16,6 @@ common_sources = \
common.c \
common.h
-check_mutex_SOURCES = check_mutex.c
-check_mutex_LDADD = \
- $(top_builddir)/libgda/libgda-6.0.la \
- $(COREDEPS_LIBS)
-
check_parser_SOURCES = check_parser.c
check_parser_LDADD = \
$(top_builddir)/libgda/libgda-6.0.la \
diff --git a/tests/multi-threading/check_parser.c b/tests/multi-threading/check_parser.c
index e7c044e..5e6d4b2 100644
--- a/tests/multi-threading/check_parser.c
+++ b/tests/multi-threading/check_parser.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2008 - 2014 Vivien Malerba <malerba gnome-db org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -31,7 +31,7 @@
#define NTHREADS 3
typedef struct {
- GMutex *mutex;
+ GMutex mutex;
GPrivate *thread_priv;
xmlDocPtr doc;
xmlNodePtr node;
@@ -108,7 +108,7 @@ main (int argc, char** argv)
gint i;
GThread *threads[NTHREADS];
- data.mutex = g_mutex_new ();
+ g_mutex_init (& (data.mutex));
data.thread_priv = g_private_new (g_free);
data.doc = doc;
data.node = NULL;
@@ -131,7 +131,7 @@ main (int argc, char** argv)
g_free (priv);
}
- g_mutex_free (data.mutex);
+ g_mutex_clear (& (data.mutex));
}
}
xmlFreeDoc (doc);
@@ -167,11 +167,11 @@ start_thread (ThData *data)
xmlChar *prov_name;
GdaSqlParser *parser;
- g_mutex_lock (data->mutex);
+ g_mutex_lock (& (data->mutex));
if (data->all_done) {
ThPrivate *copy = g_new (ThPrivate, 1);
- g_mutex_unlock (data->mutex);
+ g_mutex_unlock (& (data->mutex));
*copy = *thpriv;
return copy;
}
@@ -185,7 +185,7 @@ start_thread (ThData *data)
if (!data->node) {
ThPrivate *copy = g_new (ThPrivate, 1);
data->all_done = TRUE;
- g_mutex_unlock (data->mutex);
+ g_mutex_unlock (& (data->mutex));
*copy = *thpriv;
return copy;
}
@@ -199,7 +199,7 @@ start_thread (ThData *data)
else
parser = g_hash_table_lookup (data->parsers_hash, "");
- g_mutex_unlock (data->mutex);
+ g_mutex_unlock (& (data->mutex));
g_thread_yield ();
/* test elected node */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]