On Mo, 28 Dez 2009, Josselin Mouette wrote: > > - suspending with lid-close goes into infinite loop > > - suspending with "click-power-icon", select "suspend" *works* > > Is uswsusp installed? If so, does removing it help?
Removing uswsusp did help indeed. BTW, I was exploring also some other options and found attached patch in the suse packages. It seems to deal with very similar things as clearing duplicate suspend events. Since it is for 2.28.0 I am not sure if it is necessary, but you might take a look at it. Before removing uswsusp I built a package of g-p-m with that patch added to the quilt queue and it helped a bit (only one rogue suspend) but OTOH added something strange, namely that switching to the console and back initiated a suspend ... Anyway, the bug report is https://bugzilla.novell.com/show_bug.cgi?id=540517 I have the same warnings devkit-power-gobject-DEBUG: DBUS timed out, but recovering So I am not sure how uswsusp is playing into that piece, but at least once it worked. Best wishes Norbert ------------------------------------------------------------------------ Norbert Preining prein...@{jaist.ac.jp, logic.at, debian.org} JAIST, Japan TU Wien, Austria Debian TeX Task Force DSA: 0x09C5B094 fp: 14DF 2E6C 0307 BE6D AD76 A9C0 D2BF 4AA3 09C5 B094 ------------------------------------------------------------------------ `Time is an illusion. Lunchtime doubly so.' you should send that in to the "Reader's Digest". They've got a page for people like you.' --- Ford convincing Arthur to drink three pints in ten --- minutes at lunchtime. --- Douglas Adams, The Hitchhikers Guide to the Galaxy
Index: gnome-power-manager-2.28.0/src/egg-console-kit.c =================================================================== --- gnome-power-manager-2.28.0.orig/src/egg-console-kit.c +++ gnome-power-manager-2.28.0/src/egg-console-kit.c @@ -50,6 +50,9 @@ struct EggConsoleKitPrivate DBusGProxy *proxy_manager; DBusGProxy *proxy_session; gchar *session_id; + guint emit_changed_id; + gboolean last_emitted_active; + gboolean last_changed_active; }; enum { @@ -231,13 +234,37 @@ out: } /** + * egg_console_kit_emit_active_changed_cb: + **/ +static gboolean +egg_console_kit_emit_active_changed_cb (EggConsoleKit *console) +{ + egg_debug ("emitting active: %i", console->priv->last_changed_active); + g_signal_emit (console, signals [EGG_CONSOLE_KIT_ACTIVE_CHANGED], 0, console->priv->last_changed_active); + console->priv->last_emitted_active = console->priv->last_changed_active; + console->priv->emit_changed_id = 0; + return FALSE; +} + +/** * egg_console_kit_active_changed_cb: **/ static void egg_console_kit_active_changed_cb (DBusGProxy *proxy, gboolean active, EggConsoleKit *console) { - egg_debug ("emitting active: %i", active); - g_signal_emit (console, signals [EGG_CONSOLE_KIT_ACTIVE_CHANGED], 0, active); + if (console->priv->emit_changed_id != 0) { + g_source_remove (console->priv->emit_changed_id); + console->priv->emit_changed_id = 0; + } + + if (console->priv->last_emitted_active == active) { + egg_debug ("ignoring active (same value as last emitted): %i", active); + return; + } + + egg_debug ("queuing active: %i", active); + console->priv->last_changed_active = active; + console->priv->emit_changed_id = g_idle_add ((GSourceFunc) egg_console_kit_emit_active_changed_cb, console); } /** @@ -271,6 +298,8 @@ egg_console_kit_init (EggConsoleKit *con console->priv = EGG_CONSOLE_KIT_GET_PRIVATE (console); console->priv->proxy_manager = NULL; console->priv->session_id = NULL; + console->priv->emit_changed_id = 0; + console->priv->last_changed_active = FALSE; /* connect to D-Bus */ console->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); @@ -315,6 +344,8 @@ egg_console_kit_init (EggConsoleKit *con dbus_g_proxy_connect_signal (console->priv->proxy_session, "ActiveChanged", G_CALLBACK (egg_console_kit_active_changed_cb), console, NULL); + console->priv->last_emitted_active = egg_console_kit_is_active (console); + out: return; } @@ -338,6 +369,8 @@ egg_console_kit_finalize (GObject *objec if (console->priv->proxy_session != NULL) g_object_unref (console->priv->proxy_session); g_free (console->priv->session_id); + if (console->priv->emit_changed_id != 0) + g_source_remove (console->priv->emit_changed_id); G_OBJECT_CLASS (egg_console_kit_parent_class)->finalize (object); }