From 18e095c45ac7a32be50e9025c27f6d4661dc8c01 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 7 Feb 2010 23:11:02 -0500 Subject: [PATCH] Fix handling of jit inhibitors We need to clean those up after a stop/restart ends. Also make them actually carry the id of the session they belong to. --- src/ck-manager.c | 25 +++++++++++++++++-------- 1 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/ck-manager.c b/src/ck-manager.c index 4d3ab74..108be5b 100644 --- a/src/ck-manager.c +++ b/src/ck-manager.c @@ -1076,10 +1076,13 @@ ck_manager_set_stopping (CkManager *manager, } } +static void remove_all_session_inhibitors (CkManager *manager); + static void cleanup_after_stop (CkManager *manager) { ck_manager_set_stopping (manager, FALSE); + remove_all_session_inhibitors (manager); } static gboolean @@ -1766,8 +1769,8 @@ on_session_stop_response (CkSession *session, g_debug ("adding jit inhibitor for session %s", id); cookie = generate_unique_inhibitor_cookie (manager); - inhibitor = ck_inhibitor_new_for_session (NULL, - id, + inhibitor = ck_inhibitor_new_for_session (id, + NULL, CK_INHIBITOR_FLAG_SHUTDOWN, reason, cookie); @@ -2436,9 +2439,12 @@ remove_inhibitors_for_connection (CkManager *manager, GHashTableIter iter; CkInhibitor *inhibitor; + g_debug ("Removing inhibitors for service name: %s", service_name); + g_hash_table_iter_init (&iter, manager->priv->inhibitors); while (g_hash_table_iter_next (&iter, NULL, (gpointer*)&inhibitor)) { if (g_strcmp0 (service_name, ck_inhibitor_peek_bus_name (inhibitor)) == 0) { + g_debug ("remove inhibitor %s", ck_inhibitor_peek_id (inhibitor)); g_signal_emit (manager, signals[INHIBITOR_REMOVED], 0, ck_inhibitor_peek_id (inhibitor)); g_hash_table_iter_remove (&iter); } @@ -2453,7 +2459,7 @@ bus_name_owner_changed (DBusGProxy *bus_proxy, CkManager *manager) { if (strlen (new_service_name) == 0) { - remove_inhibitors_for_connection (manager, old_service_name); + remove_inhibitors_for_connection (manager, old_service_name); remove_sessions_for_connection (manager, old_service_name); } @@ -2874,7 +2880,8 @@ ck_manager_inhibit (CkManager *manager, g_return_val_if_fail (CK_IS_MANAGER (manager), FALSE); - g_debug ("CkManager: Inhibit reason=%s flags=%u", reason, flags); + g_debug ("CkManager: Inhibit reason=%s flags=%u busname=%s", + reason, flags, dbus_g_method_get_sender (context)); if (reason == NULL || reason[0] == '\0') { GError *error; @@ -3026,8 +3033,8 @@ on_query_stop_timeout (CkManager *manager) g_debug ("adding jit inhibitor for session %s", ck_session_peek_id (session)); cookie = generate_unique_inhibitor_cookie (manager); - inhibitor = ck_inhibitor_new_for_session (NULL, - ck_session_peek_id (session), + inhibitor = ck_inhibitor_new_for_session (ck_session_peek_id (session), + NULL, CK_INHIBITOR_FLAG_SHUTDOWN, "Not responding", cookie); @@ -3048,12 +3055,14 @@ remove_all_session_inhibitors (CkManager *manager) { GHashTableIter iter; CkInhibitor *inhibitor; + const gchar *id; g_debug ("removing all session inhibitors"); g_hash_table_iter_init (&iter, manager->priv->inhibitors); while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&inhibitor)) { - if (ck_inhibitor_peek_session_id (inhibitor) != NULL) { - g_debug ("removing jit inhibitor for session %s", ck_inhibitor_peek_session_id (inhibitor)); + id = ck_inhibitor_peek_session_id (inhibitor); + if (id && *id) { + g_debug ("removing jit inhibitor for session %s", id); g_signal_emit (manager, signals[INHIBITOR_REMOVED], 0, ck_inhibitor_peek_id (inhibitor)); g_hash_table_iter_remove (&iter); } -- 1.6.6