summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRadek Novacek <rnovacek@redhat.com>2014-04-10 14:32:26 +0200
committerRadek Novacek <rnovacek@redhat.com>2014-04-10 14:32:26 +0200
commit1d6e5d8f31b1a374f8308900568cd5c6efb0d2b1 (patch)
treecbdc6a9f12a94fd323a7fff5ddeac331debdd612
parentb65667c9324eba14e3da7d4cb85711bac7afcd4d (diff)
downloadopenlmi-providers-1d6e5d8f31b1a374f8308900568cd5c6efb0d2b1.tar.gz
openlmi-providers-1d6e5d8f31b1a374f8308900568cd5c6efb0d2b1.tar.xz
openlmi-providers-1d6e5d8f31b1a374f8308900568cd5c6efb0d2b1.zip
power: check if connection to Logind DBus is valid
-rw-r--r--src/power/power.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/power/power.c b/src/power/power.c
index 49d4ec2..5e82685 100644
--- a/src/power/power.c
+++ b/src/power/power.c
@@ -139,6 +139,14 @@ Proxy *power_create_logind()
error("Unable to connect to logind via DBus: %s", err->message);
g_error_free(err);
+ return NULL;
+ }
+ // Logind always has some properties, if no property is cached,
+ // the proxied object doesn't exist => don't use logind
+ if (g_dbus_proxy_get_cached_property_names(logind_proxy) == NULL) {
+ g_object_unref(logind_proxy);
+ debug("Logind DBus interface is not available");
+ return NULL;
}
return logind_proxy;
#else
@@ -164,6 +172,7 @@ bool power_call_logind(Proxy *proxy, const char *method)
return true;
}
}
+ return false;
#endif
return false;
}
@@ -385,15 +394,7 @@ unsigned short *power_available_requested_power_states(Power *power, int *count)
int i = 0;
#ifdef HAS_GDBUS
- GError *err = NULL;
- GDBusProxy *logind_proxy;
- if ((logind_proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_NONE, NULL, LOGIND_NAME, LOGIND_PATH,
- LOGIND_INTERFACE, NULL, &err)) == NULL) {
-
- error("Unable to connect to logind via DBus: %s", err->message);
- g_error_free(err);
- }
+ GDBusProxy *logind_proxy = power_create_logind();
#else
void *logind_proxy = NULL;
#endif