summaryrefslogtreecommitdiff
path: root/src/up-daemon.c
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2013-10-14 22:09:19 +0200
committerBastien Nocera <hadess@hadess.net>2013-10-15 15:01:37 +0200
commitf71ac98cd22867f220808eae35e40b37ef3f9716 (patch)
treedee6f6c6ec87a40a78196395f1a08b74603e15a8 /src/up-daemon.c
parentd74e4a7243c000ff042d37e6fd6be880a4cc4fbb (diff)
downloadupower-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.c79
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);