summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorMarek Kasik <mkasik@redhat.com>2014-04-04 15:45:01 +0200
committerMarek Kasik <mkasik@redhat.com>2014-04-04 15:57:01 +0200
commitc5419557ec86b40d4d7300352e01ee83d445a902 (patch)
treebb6ccdbda75e00dc78504dcfed3f2a515e1f9fd8 /service
parent3aab9aaf052cc12106ecaa4d21101bf89ee35646 (diff)
downloaddconf-c5419557ec86b40d4d7300352e01ee83d445a902.tar.gz
service: Don't hang during shutdown
Remember whether a signal was signalled to dconf-service so we don't call g_application_release() more than once. https://bugzilla.gnome.org/show_bug.cgi?id=727549
Diffstat (limited to 'service')
-rw-r--r--service/dconf-service.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/service/dconf-service.c b/service/dconf-service.c
index 8302bed..9127472 100644
--- a/service/dconf-service.c
+++ b/service/dconf-service.c
@@ -39,6 +39,8 @@ typedef struct
DConfBlame *blame;
GHashTable *writers;
GArray *subtree_ids;
+
+ gboolean released;
} DConfService;
G_DEFINE_TYPE (DConfService, dconf_service, G_TYPE_APPLICATION)
@@ -48,7 +50,10 @@ dconf_service_signalled (gpointer user_data)
{
DConfService *service = user_data;
- g_application_release (G_APPLICATION (service));
+ if (!service->released)
+ g_application_release (G_APPLICATION (service));
+
+ service->released = TRUE;
return G_SOURCE_REMOVE;
}