From 2dc48e2c481e975160cd7b5fc7eb8dcc2ce0bb75 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 5 Feb 2010 22:23:28 -0500 Subject: [PATCH 22/22] Misc fixes --- src/ck-manager.c | 57 +++++++++++++++++++++++++++++++++++------------------ src/ck-manager.h | 4 +- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/ck-manager.c b/src/ck-manager.c index ced8d53..4d3ab74 100644 --- a/src/ck-manager.c +++ b/src/ck-manager.c @@ -1000,13 +1000,14 @@ get_num_real_inhibitors (CkManager *manager) } } + g_debug ("found %u real inhibitor", num); return num; } static gboolean need_elevated_privileges (CkManager *manager) { - return get_system_num_users (manager) > 0 || + return get_system_num_users (manager) > 1 || get_num_real_inhibitors (manager) > 0; } @@ -1119,12 +1120,19 @@ stop_all_sessions (AuthReady *ready, GHashTableIter iter; CkSession *session; - if (result < 0) { + if (result < 2) { GError *new_error; - new_error = g_error_new (CK_MANAGER_ERROR, - CK_MANAGER_ERROR_GENERAL, - "Failed to obtain authorization: %s", error->message); + if (error) { + new_error = g_error_new (CK_MANAGER_ERROR, + CK_MANAGER_ERROR_GENERAL, + "Failed to obtain authorization: %s", error->message); + } + else { + new_error = g_error_new (CK_MANAGER_ERROR, + CK_MANAGER_ERROR_GENERAL, + "Failed to obtain authorization"); + } dbus_g_method_return_error (ready->context, new_error); g_error_free (new_error); cleanup_after_stop (ready->manager); @@ -1703,6 +1711,10 @@ permissions_obtained (AuthReady *ready, dbus_g_method_return (ready->context, can_proceed, inhibitors, sessions); } + + g_debug ("QueryStop: reset context"); + /* QueryStop is done */ + ready->manager->priv->query_context = NULL; } static void @@ -1752,6 +1764,7 @@ on_session_stop_response (CkSession *session, CkInhibitor *inhibitor; guint cookie; + g_debug ("adding jit inhibitor for session %s", id); cookie = generate_unique_inhibitor_cookie (manager); inhibitor = ck_inhibitor_new_for_session (NULL, id, @@ -2894,7 +2907,7 @@ ck_manager_inhibit (CkManager *manager, flags, reason, cookie); - g_hash_table_insert (manager->priv->inhibitors, GINT_TO_POINTER (cookie), inhibitor); + g_hash_table_insert (manager->priv->inhibitors, GUINT_TO_POINTER (cookie), inhibitor); g_signal_emit (manager, signals[INHIBITOR_ADDED], 0, ck_inhibitor_peek_id (inhibitor)); dbus_g_method_return (context, cookie); @@ -2913,7 +2926,7 @@ ck_manager_uninhibit (CkManager *manager, g_debug ("GsmManager: Uninhibit %u", cookie); - inhibitor = (CkInhibitor *) g_hash_table_lookup (manager->priv->inhibitors, GINT_TO_POINTER (cookie)); + inhibitor = (CkInhibitor *) g_hash_table_lookup (manager->priv->inhibitors, GUINT_TO_POINTER (cookie)); if (inhibitor == NULL) { GError *error; @@ -2929,7 +2942,7 @@ ck_manager_uninhibit (CkManager *manager, } g_signal_emit (manager, signals[INHIBITOR_REMOVED], 0, ck_inhibitor_peek_id (inhibitor)); - g_hash_table_remove (manager->priv->inhibitors, GINT_TO_POINTER (cookie)); + g_hash_table_remove (manager->priv->inhibitors, GUINT_TO_POINTER (cookie)); dbus_g_method_return (context); @@ -2941,11 +2954,10 @@ find_inhibitor_with_flags (CkManager *manager, guint flags) { GHashTableIter iter; - guint cookie; CkInhibitor *inhibitor; g_hash_table_iter_init (&iter, manager->priv->inhibitors); - while (g_hash_table_iter_next (&iter, (gpointer *)&cookie, (gpointer *)&inhibitor)) { + while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&inhibitor)) { if (ck_inhibitor_peek_flags (inhibitor) & flags) { return inhibitor; } @@ -2955,10 +2967,10 @@ find_inhibitor_with_flags (CkManager *manager, } gboolean -ck_manager_is_inhibited (CkManager *manager, - guint flags, - gboolean *is_inhibited, - GError *error) +ck_manager_is_inhibited (CkManager *manager, + guint flags, + gboolean *is_inhibited, + GError *error) { g_return_val_if_fail (CK_IS_MANAGER (manager), FALSE); @@ -3005,11 +3017,14 @@ on_query_stop_timeout (CkManager *manager) manager->priv->query_timeout = 0; + g_debug ("QueryStop: timeout reached, %d sessions left", g_slist_length (manager->priv->query_sessions)); + for (l = manager->priv->query_sessions; l != NULL; l = l->next) { CkSession *session = l->data; CkInhibitor *inhibitor; guint cookie; + 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), @@ -3031,12 +3046,14 @@ on_query_stop_timeout (CkManager *manager) static void remove_all_session_inhibitors (CkManager *manager) { - GHashTableIter iter; - CkInhibitor *inhibitor; + GHashTableIter iter; + CkInhibitor *inhibitor; - 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 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)); g_signal_emit (manager, signals[INHIBITOR_REMOVED], 0, ck_inhibitor_peek_id (inhibitor)); g_hash_table_iter_remove (&iter); } @@ -3083,7 +3100,7 @@ ck_manager_query_stop (CkManager *manager, /* just in case, remove stale jit inhibitors; there shouldn't be any */ remove_all_session_inhibitors (manager); - manager->priv->query_timeout = g_timeout_add_seconds (2, (GSourceFunc)on_query_stop_timeout, manager); + manager->priv->query_timeout = g_timeout_add_seconds (5, (GSourceFunc)on_query_stop_timeout, manager); g_hash_table_iter_init (&iter, manager->priv->sessions); while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&session)) { diff --git a/src/ck-manager.h b/src/ck-manager.h index 3e18e16..e9c63ed 100644 --- a/src/ck-manager.h +++ b/src/ck-manager.h @@ -108,10 +108,10 @@ gboolean ck_manager_uninhibit (CkManager gboolean ck_manager_is_inhibited (CkManager *manager, guint flags, gboolean *is_inhibited, - GError *error); + GError *error); gboolean ck_manager_get_inhibitors (CkManager *manager, GPtrArray **inhibitors, - GError *error); + GError *error); /* Authoritative properties */ -- 1.6.6