summaryrefslogtreecommitdiff
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
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.
-rw-r--r--src/up-daemon.c79
-rw-r--r--src/up-device.c31
2 files changed, 44 insertions, 66 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);
diff --git a/src/up-device.c b/src/up-device.c
index 371dcb9..2729b03 100644
--- a/src/up-device.c
+++ b/src/up-device.c
@@ -49,7 +49,6 @@ struct UpDevicePrivate
UpHistory *history;
GObject *native;
gboolean has_ever_refresh;
- gboolean during_coldplug;
/* properties */
guint64 update_time;
@@ -614,10 +613,6 @@ up_device_coldplug (UpDevice *device, UpDaemon *daemon, GObject *native)
native_path = up_native_get_native_path (native);
device->priv->native_path = g_strdup (native_path);
- /* stop signals and callbacks */
- g_object_freeze_notify (G_OBJECT(device));
- device->priv->during_coldplug = TRUE;
-
/* coldplug source */
if (klass->coldplug != NULL) {
ret = klass->coldplug (device);
@@ -627,13 +622,6 @@ up_device_coldplug (UpDevice *device, UpDaemon *daemon, GObject *native)
}
}
- /* only put on the bus if we succeeded */
- ret = up_device_register_device (device);
- if (!ret) {
- g_warning ("failed to register device %s", device->priv->native_path);
- goto out;
- }
-
/* force a refresh, although failure isn't fatal */
ret = up_device_refresh_internal (device);
if (!ret) {
@@ -647,14 +635,19 @@ up_device_coldplug (UpDevice *device, UpDaemon *daemon, GObject *native)
/* get the id so we can load the old history */
id = up_device_get_id (device);
- if (id != NULL)
+ if (id != NULL) {
up_history_set_id (device->priv->history, id);
+ g_free (id);
+ }
+
+ /* only put on the bus if we succeeded */
+ ret = up_device_register_device (device);
+ if (!ret) {
+ g_warning ("failed to register device %s", device->priv->native_path);
+ goto out;
+ }
out:
- /* start signals and callbacks */
- g_object_thaw_notify (G_OBJECT(device));
- device->priv->during_coldplug = FALSE;
- g_free (id);
return ret;
}
@@ -921,10 +914,6 @@ up_device_perhaps_changed_cb (GObject *object, GParamSpec *pspec, UpDevice *devi
{
g_return_if_fail (UP_IS_DEVICE (device));
- /* don't proxy during coldplug */
- if (device->priv->during_coldplug)
- return;
-
/* save new history */
up_history_set_state (device->priv->history, device->priv->state);
up_history_set_charge_data (device->priv->history, device->priv->percentage);