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

Reply via email to