var = g_dbus_connection_call_finish(source_object, res, &err);
- switch (data->call_type) {
- case CALL_TYPE_SYSTEMD:
- if (var)
- status = UNIT_CONTROL_OK;
- else
- status = UNIT_CONTROL_ERROR;
-
- break;
- case CALL_TYPE_ACTD:
- if (!var)
- status = UNIT_CONTROL_ERROR;
- else {
- g_variant_get(var, "(s)", &result);
- if (g_strcmp0(result, "ok") == 0)
+ if (err && err->code == G_IO_ERROR_TIMED_OUT) {
+ status = UNIT_CONTROL_TIMEOUT;
+ } else {
+ switch (data->call_type) {
+ case CALL_TYPE_SYSTEMD:
+ if (var)
status = UNIT_CONTROL_OK;
else
status = UNIT_CONTROL_ERROR;
- }
- break;
+ break;
+ case CALL_TYPE_ACTD:
+ if (!var)
+ status = UNIT_CONTROL_ERROR;
+ else {
+ g_variant_get(var, "(s)", &result);
+ if (g_strcmp0(result, "ok") == 0)
+ status = UNIT_CONTROL_OK;
+ else
+ status = UNIT_CONTROL_ERROR;
+ }
+
+ break;
+ }
}
data->cb(status, data->user_data);
ret = UNIT_CONTROL_OK;
out:
- if (err)
+ if (err) {
+ if (err->code == G_IO_ERROR_TIMED_OUT)
+ ret = UNIT_CONTROL_TIMEOUT;
g_error_free(err);
+ }
return ret;
}