unit_control: add separate return value when timeout occurs 48/211648/1
authorMaciej Slodczyk <m.slodczyk2@partner.samsung.com>
Wed, 7 Aug 2019 13:11:41 +0000 (15:11 +0200)
committerMaciej Slodczyk <m.slodczyk2@partner.samsung.com>
Wed, 7 Aug 2019 13:11:41 +0000 (15:11 +0200)
Change-Id: I663691dfb3ece5197efdcb0ed9fc4909dd4a0c0a
Signed-off-by: Maciej Slodczyk <m.slodczyk2@partner.samsung.com>
include/unit_control.h
src/libactd/unit_control.c

index 0ec916c5e926ec98965ed8a7f2e49f2ed9be63c6..76a7286b70b14b94ab80a611967d918a4637963f 100644 (file)
@@ -4,6 +4,7 @@
 enum {
        UNIT_CONTROL_REQUEST_SENT = 0,
        UNIT_CONTROL_OK,
+       UNIT_CONTROL_TIMEOUT,
        UNIT_CONTROL_ERROR,
 };
 
index fd83b80969fd5103fd664694f0041027a2d7fd49..9fdd077b771e6f9c627c1146cca19cba562d68dd 100644 (file)
@@ -61,26 +61,30 @@ static void generic_callback(GObject *source_object, GAsyncResult *res, gpointer
 
        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);
@@ -157,8 +161,11 @@ static int call_uc(GBusType bus_type, const char *method, const char *unit, int
        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;
 }