diff options
author | Bastien Nocera <hadess@hadess.net> | 2013-10-14 22:09:19 +0200 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2013-10-15 15:01:37 +0200 |
commit | f71ac98cd22867f220808eae35e40b37ef3f9716 (patch) | |
tree | dee6f6c6ec87a40a78196395f1a08b74603e15a8 /src/up-daemon.c | |
parent | d74e4a7243c000ff042d37e6fd6be880a4cc4fbb (diff) | |
download | upower-f71ac98cd22867f220808eae35e40b37ef3f9716.tar.gz |
daemon: Register on the Bus after coldplug
Both for the daemon and devices, so as to avoid D-Bus changes
storms on startup.
Diffstat (limited to 'src/up-daemon.c')
-rw-r--r-- | src/up-daemon.c | 79 |
1 files changed, 34 insertions, 45 deletions
diff --git a/src/up-daemon.c b/src/up-daemon.c index 220348c..ce5da3a 100644 --- a/src/up-daemon.c +++ b/src/up-daemon.c @@ -73,7 +73,6 @@ struct UpDaemonPrivate UpPolkit *polkit; UpBackend *backend; UpDeviceList *power_devices; - gboolean during_coldplug; guint battery_poll_id; guint battery_poll_count; guint action_timeout_id; @@ -334,17 +333,8 @@ up_daemon_startup (UpDaemon *daemon) UpDeviceLevel warning_level; UpDaemonPrivate *priv = daemon->priv; - /* register on bus */ - ret = up_daemon_register_power_daemon (daemon); - if (!ret) { - g_warning ("failed to register"); - goto out; - } - /* stop signals and callbacks */ g_debug ("daemon now coldplug"); - g_object_freeze_notify (G_OBJECT(daemon)); - priv->during_coldplug = TRUE; /* coldplug backend backend */ ret = up_backend_coldplug (priv->backend, daemon); @@ -361,10 +351,15 @@ up_daemon_startup (UpDaemon *daemon) up_daemon_set_warning_level (daemon, warning_level); /* start signals and callbacks */ - g_object_thaw_notify (G_OBJECT(daemon)); - priv->during_coldplug = FALSE; g_debug ("daemon now not coldplug"); + /* register on bus */ + ret = up_daemon_register_power_daemon (daemon); + if (!ret) { + g_warning ("failed to register"); + goto out; + } + out: return ret; } @@ -396,13 +391,13 @@ up_daemon_emit_properties_changed (UpDaemon *daemon, g_return_if_fail (UP_IS_DAEMON (daemon)); - if (daemon->priv->during_coldplug) - return; - /* GObject */ g_debug ("emitting changed"); g_signal_emit (daemon, signals[SIGNAL_CHANGED], 0); + if (daemon->priv->connection == NULL) + return; + /* D-Bus */ connection = dbus_g_connection_get_connection (daemon->priv->connection); message = dbus_message_new_signal ("/org/freedesktop/UPower", @@ -674,17 +669,15 @@ up_daemon_device_changed_cb (UpDevice *device, UpDaemon *daemon) up_daemon_set_warning_level (daemon, warning_level); /* emit */ - if (!priv->during_coldplug) { - object_path = up_device_get_object_path (device); - g_debug ("emitting device-changed: %s", object_path); - - /* don't crash the session */ - if (object_path == NULL) { - g_warning ("INTERNAL STATE CORRUPT: not sending NULL, device:%p", device); - return; - } - g_signal_emit (daemon, signals[SIGNAL_DEVICE_CHANGED], 0, object_path); + object_path = up_device_get_object_path (device); + g_debug ("emitting device-changed: %s", object_path); + + /* don't crash the session */ + if (object_path == NULL) { + g_warning ("INTERNAL STATE CORRUPT: not sending NULL, device:%p", device); + return; } + g_signal_emit (daemon, signals[SIGNAL_DEVICE_CHANGED], 0, object_path); } /** @@ -716,17 +709,15 @@ up_daemon_device_added_cb (UpBackend *backend, GObject *native, UpDevice *device up_daemon_poll_battery_devices_for_a_little_bit (daemon); /* emit */ - if (!priv->during_coldplug) { - object_path = up_device_get_object_path (device); - g_debug ("emitting added: %s (during coldplug %i)", object_path, priv->during_coldplug); - - /* don't crash the session */ - if (object_path == NULL) { - g_warning ("INTERNAL STATE CORRUPT: not sending NULL, native:%p, device:%p", native, device); - return; - } - g_signal_emit (daemon, signals[SIGNAL_DEVICE_ADDED], 0, object_path); + object_path = up_device_get_object_path (device); + g_debug ("emitting added: %s", object_path); + + /* don't crash the session */ + if (object_path == NULL) { + g_warning ("INTERNAL STATE CORRUPT: not sending NULL, native:%p, device:%p", native, device); + return; } + g_signal_emit (daemon, signals[SIGNAL_DEVICE_ADDED], 0, object_path); } /** @@ -754,17 +745,15 @@ up_daemon_device_removed_cb (UpBackend *backend, GObject *native, UpDevice *devi up_daemon_poll_battery_devices_for_a_little_bit (daemon); /* emit */ - if (!priv->during_coldplug) { - object_path = up_device_get_object_path (device); - g_debug ("emitting device-removed: %s", object_path); - - /* don't crash the session */ - if (object_path == NULL) { - g_warning ("INTERNAL STATE CORRUPT: not sending NULL, native:%p, device:%p", native, device); - return; - } - g_signal_emit (daemon, signals[SIGNAL_DEVICE_REMOVED], 0, object_path); + object_path = up_device_get_object_path (device); + g_debug ("emitting device-removed: %s", object_path); + + /* don't crash the session */ + if (object_path == NULL) { + g_warning ("INTERNAL STATE CORRUPT: not sending NULL, native:%p, device:%p", native, device); + return; } + g_signal_emit (daemon, signals[SIGNAL_DEVICE_REMOVED], 0, object_path); /* finalise the object */ g_object_unref (device); |