UNIT_CONTROL_BUS_TYPE_SESSION = 2
} BusType;
+enum {
+ UNIT_CONTROL_TIMEOUT_DEFAULT = -1,
+ UNIT_CONTROL_TIMEOUT_MAX = -2
+} UnitControlTimeout;
+
typedef void (*actd_unit_cb)(int status, void *user_data);
-int actd_start_unit(BusType bus_type, const char *unit, int timeout);
-int actd_stop_unit(BusType bus_type, const char *unit, int timeout);
-int actd_restart_unit(BusType bus_type, const char *unit, int timeout);
+int actd_start_unit(BusType bus_type, const char *unit, int timeout_ms);
+int actd_stop_unit(BusType bus_type, const char *unit, int timeout_ms);
+int actd_restart_unit(BusType bus_type, const char *unit, int timeout_ms);
-int actd_start_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout);
-int actd_stop_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout);
-int actd_restart_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout);
+int actd_start_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout_ms);
+int actd_stop_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout_ms);
+int actd_restart_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout_ms);
#endif /* UNIT_CONTROL_H */
int call_type;
};
+static gint timeout2glib(int timeout_ms)
+{
+ /* see glib documentation for explanation */
+ return timeout_ms >= 0 ? timeout_ms : (timeout_ms == -2 ? G_MAXINT : -1);
+}
+
static void generic_callback(GObject *source_object, GAsyncResult *res, gpointer user_data)
{
struct generic_user_data *data = user_data;
return NULL;
}
-static int call_uc(GBusType bus_type, const char *method, const char *unit, int timeout)
+static int call_uc(GBusType bus_type, const char *method, const char *unit, int timeout_ms)
{
int ret;
GVariant *msg = NULL;
g_variant_new("(ss)", unit, "replace"),
NULL,
G_DBUS_CALL_FLAGS_NONE,
- timeout,
+ timeout2glib(timeout_ms),
NULL,
NULL);
if (!msg)
g_variant_new("(s)", unit),
NULL,
G_DBUS_CALL_FLAGS_NONE,
- timeout,
+ timeout2glib(timeout_ms),
NULL,
NULL);
if (!msg)
return ret;
}
-static int call_uc_async(GBusType bus_type, const char *method, const char *unit, actd_unit_cb cb, void *user_data, int timeout)
+static int call_uc_async(GBusType bus_type, const char *method, const char *unit, actd_unit_cb cb, void *user_data, int timeout_ms)
{
GDBusConnection *bus;
struct generic_user_data *data = user_data;
g_variant_new("(ss)", unit, "replace"),
NULL,
G_DBUS_CALL_FLAGS_NONE,
- timeout,
+ timeout2glib(timeout_ms),
NULL,
(GAsyncReadyCallback) generic_callback,
data);
g_variant_new("(s)", unit),
NULL,
G_DBUS_CALL_FLAGS_NONE,
- timeout,
+ timeout2glib(timeout_ms),
NULL,
(GAsyncReadyCallback) generic_callback,
data);
return 0;
}
-int actd_start_unit(BusType bus_type, const char *unit, int timeout)
+int actd_start_unit(BusType bus_type, const char *unit, int timeout_ms)
{
- return call_uc((GBusType)bus_type, "Start", unit, timeout);
+ return call_uc((GBusType)bus_type, "Start", unit, timeout_ms);
}
-int actd_stop_unit(BusType bus_type, const char *unit, int timeout)
+int actd_stop_unit(BusType bus_type, const char *unit, int timeout_ms)
{
- return call_uc((GBusType)bus_type, "Stop", unit, timeout);
+ return call_uc((GBusType)bus_type, "Stop", unit, timeout_ms);
}
-int actd_restart_unit(BusType bus_type, const char *unit, int timeout)
+int actd_restart_unit(BusType bus_type, const char *unit, int timeout_ms)
{
- return call_uc((GBusType)bus_type, "Restart", unit, timeout);
+ return call_uc((GBusType)bus_type, "Restart", unit, timeout_ms);
}
-int actd_start_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout)
+int actd_start_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout_ms)
{
- return call_uc_async((GBusType)bus_type, "Start", unit, cb, user_data, timeout);
+ return call_uc_async((GBusType)bus_type, "Start", unit, cb, user_data, timeout_ms);
}
-int actd_stop_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout)
+int actd_stop_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout_ms)
{
- return call_uc_async((GBusType)bus_type, "Stop", unit, cb, user_data, timeout);
+ return call_uc_async((GBusType)bus_type, "Stop", unit, cb, user_data, timeout_ms);
}
-int actd_restart_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout)
+int actd_restart_unit_async(BusType bus_type, const char *unit, actd_unit_cb cb, void *user_data, int timeout_ms)
{
- return call_uc_async((GBusType)bus_type, "Restart", unit, cb, user_data, timeout);
+ return call_uc_async((GBusType)bus_type, "Restart", unit, cb, user_data, timeout_ms);
}