Author: post
Date: 2010-10-02 10:38:00 +0200 (Sat, 02 Oct 2010)
New Revision: 3544
Modified:
trunk/librawstudio/conf_interface.c
Log:
Enable gconf mutex when calling "gconf_client_get_default()", since this
apparently can lead to a race condition when calling "gconf_client_get()" at
the same time, leading to a crash.
Modified: trunk/librawstudio/conf_interface.c
===================================================================
--- trunk/librawstudio/conf_interface.c 2010-09-25 15:38:28 UTC (rev 3543)
+++ trunk/librawstudio/conf_interface.c 2010-10-02 08:38:00 UTC (rev 3544)
@@ -45,14 +45,13 @@
gboolean ret = FALSE;
#ifdef WITH_GCONF
GConfValue *gvalue;
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
if (client)
{
- g_static_mutex_lock(&lock);
gvalue = gconf_client_get(client, fullname->str, NULL);
- g_static_mutex_unlock(&lock);
if (gvalue)
{
if (gvalue->type == GCONF_VALUE_BOOL)
@@ -65,6 +64,7 @@
}
g_object_unref(client);
}
+ g_static_mutex_unlock(&lock);
g_string_free(fullname, TRUE);
#endif
#ifdef WITH_REGISTRY
@@ -84,11 +84,10 @@
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
+ g_static_mutex_lock(&lock);
if (client)
{
- g_static_mutex_lock(&lock);
gvalue = gconf_client_get(client, fullname->str, NULL);
- g_static_mutex_unlock(&lock);
if (gvalue)
{
if (gvalue->type == GCONF_VALUE_BOOL)
@@ -101,6 +100,7 @@
}
g_object_unref(client);
}
+ g_static_mutex_unlock(&lock);
g_string_free(fullname, TRUE);
#endif
#ifdef WITH_REGISTRY
@@ -114,10 +114,10 @@
{
gboolean ret = FALSE;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
- g_static_mutex_lock(&lock);
if (client)
{
ret = gconf_client_set_bool(client, fullname->str, bool_value,
NULL);
@@ -138,14 +138,13 @@
gchar *ret=NULL;
#ifdef WITH_GCONF
GConfValue *gvalue;
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
if (client)
{
- g_static_mutex_lock(&lock);
gvalue = gconf_client_get(client, fullname->str, NULL);
- g_static_mutex_unlock(&lock);
if (gvalue)
{
if (gvalue->type == GCONF_VALUE_STRING)
@@ -154,6 +153,7 @@
}
g_object_unref(client);
}
+ g_static_mutex_unlock(&lock);
g_string_free(fullname, TRUE);
#endif
#ifdef WITH_REGISTRY
@@ -185,16 +185,16 @@
{
gboolean ret = FALSE;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
if (client)
{
- g_static_mutex_lock(&lock);
ret = gconf_client_set_string(client, fullname->str,
string_value, NULL);
g_static_mutex_unlock(&lock);
- g_object_unref(client);
}
+ g_object_unref(client);
g_string_free(fullname, TRUE);
#endif
#ifdef WITH_REGISTRY
@@ -215,15 +215,14 @@
{
gboolean ret=FALSE;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfValue *gvalue;
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
if (client)
{
- g_static_mutex_lock(&lock);
gvalue = gconf_client_get(client, fullname->str, NULL);
- g_static_mutex_unlock(&lock);
if (gvalue)
{
if (gvalue->type == GCONF_VALUE_INT)
@@ -235,6 +234,7 @@
}
g_object_unref(client);
}
+ g_static_mutex_unlock(&lock);
g_string_free(fullname, TRUE);
#endif
#ifdef WITH_REGISTRY
@@ -267,10 +267,10 @@
{
gboolean ret = FALSE;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
- g_static_mutex_lock(&lock);
if (client)
{
ret = gconf_client_set_int(client, fullname->str,
integer_value, NULL);
@@ -328,14 +328,13 @@
gboolean ret=FALSE;
#ifdef WITH_GCONF
GConfValue *gvalue;
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
if (client)
{
- g_static_mutex_lock(&lock);
gvalue = gconf_client_get(client, fullname->str, NULL);
- g_static_mutex_unlock(&lock);
if (gvalue)
{
if (gvalue->type == GCONF_VALUE_FLOAT)
@@ -347,6 +346,7 @@
}
g_object_unref(client);
}
+ g_static_mutex_unlock(&lock);
g_string_free(fullname, TRUE);
#endif
#ifdef WITH_REGISTRY
@@ -379,10 +379,10 @@
{
gboolean ret = FALSE;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
- g_static_mutex_lock(&lock);
if (client)
{
ret = gconf_client_set_float(client, fullname->str,
float_value, NULL);
@@ -409,11 +409,11 @@
{
GSList *list = NULL;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
- g_static_mutex_lock(&lock);
if (client)
{
list = gconf_client_get_list(client, fullname->str,
GCONF_VALUE_STRING, NULL);
@@ -432,11 +432,11 @@
{
gboolean ret = FALSE;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
- g_static_mutex_lock(&lock);
if (client)
{
ret = gconf_client_set_list(client, fullname->str,
GCONF_VALUE_STRING, list, NULL);
@@ -494,16 +494,16 @@
{
gboolean ret = FALSE;
#ifdef WITH_GCONF
+ g_static_mutex_lock(&lock);
GConfClient *client = gconf_client_get_default();
GString *fullname = g_string_new(GCONF_PATH);
g_string_append(fullname, name);
if (client)
{
- g_static_mutex_lock(&lock);
ret = gconf_client_unset(client, fullname->str, NULL);
- g_static_mutex_unlock(&lock);
g_object_unref(client);
}
+ g_static_mutex_unlock(&lock);
g_string_free(fullname, TRUE);
#endif
#ifdef WITH_REGISTRY
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit