unit_control: Improve timeout handling 42/211542/1
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Tue, 6 Aug 2019 08:47:38 +0000 (10:47 +0200)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Tue, 6 Aug 2019 08:47:38 +0000 (10:47 +0200)
 - explicitly specify timeout unit in function signatures
   (ie. timeout_ms, instead of just timeout)

 - add UnitControlTimeout enum with default and max timeout
   constants

Change-Id: I637ad82251739a245fdbaaa936999263c919591f

include/unit_control.h
src/libactd/unit_control.c

index 590ce23dcbc35140ba33a526b5138ce8ec51f585..6a034503c5845ca995c2f71edaa8fde16e944169 100644 (file)
@@ -12,14 +12,19 @@ typedef enum
        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 */
index e6c66b5de1f194292bd99bcdc701dd6bc60180d1..e548d0f1e5609e00b73eb16b24dfb89e93e2bf86 100644 (file)
@@ -41,6 +41,12 @@ struct generic_user_data {
        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;
@@ -96,7 +102,7 @@ const char *translate_to_systemd(const char *method)
        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;
@@ -116,7 +122,7 @@ static int call_uc(GBusType bus_type, const char *method, const char *unit, int
                                g_variant_new("(ss)", unit, "replace"),
                                NULL,
                                G_DBUS_CALL_FLAGS_NONE,
-                               timeout,
+                               timeout2glib(timeout_ms),
                                NULL,
                                NULL);
                if (!msg)
@@ -133,7 +139,7 @@ static int call_uc(GBusType bus_type, const char *method, const char *unit, int
                                g_variant_new("(s)", unit),
                                NULL,
                                G_DBUS_CALL_FLAGS_NONE,
-                               timeout,
+                               timeout2glib(timeout_ms),
                                NULL,
                                NULL);
                if (!msg)
@@ -151,7 +157,7 @@ static int call_uc(GBusType bus_type, const char *method, const char *unit, int
        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;
@@ -177,7 +183,7 @@ static int call_uc_async(GBusType bus_type, const char *method, const char *unit
                                g_variant_new("(ss)", unit, "replace"),
                                NULL,
                                G_DBUS_CALL_FLAGS_NONE,
-                               timeout,
+                               timeout2glib(timeout_ms),
                                NULL,
                                (GAsyncReadyCallback) generic_callback,
                                data);
@@ -191,7 +197,7 @@ static int call_uc_async(GBusType bus_type, const char *method, const char *unit
                                g_variant_new("(s)", unit),
                                NULL,
                                G_DBUS_CALL_FLAGS_NONE,
-                               timeout,
+                               timeout2glib(timeout_ms),
                                NULL,
                                (GAsyncReadyCallback) generic_callback,
                                data);
@@ -200,32 +206,32 @@ static int call_uc_async(GBusType bus_type, const char *method, const char *unit
        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);
 }