chiark / gitweb /
busctl: add --timeout= option to specify method call timeout
authorLennart Poettering <lennart@poettering.net>
Fri, 21 Nov 2014 19:31:50 +0000 (20:31 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 21 Nov 2014 19:31:50 +0000 (20:31 +0100)
man/busctl.xml
src/libsystemd/sd-bus/busctl.c

index e0af30e..c47a329 100644 (file)
@@ -216,6 +216,22 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--timeout=</option><replaceable>SECS</replaceable></term>
+
+        <listitem>
+          <para>When used with the <command>call</command> command
+          specifies the maximum time to wait for method call
+          completion. If no time unit is specified assumes
+          seconds. The usual other units are understood, too (ms, us,
+          s, min, h, d, w, month, y). Note that this timeout does not
+          apply if <option>--expect-reply=no</option> is used as the
+          tool does not wait for any reply message then. When not
+          specified or when set to 0 the default of
+          <literal>25s</literal> is assumed.</para>
+        </listitem>
+      </varlistentry>
+
       <xi:include href="user-system-options.xml" xpointer="user" />
       <xi:include href="user-system-options.xml" xpointer="system" />
       <xi:include href="user-system-options.xml" xpointer="host" />
index 145b319..2cea21e 100644 (file)
@@ -56,6 +56,7 @@ static bool arg_verbose = false;
 static bool arg_expect_reply = true;
 static bool arg_auto_start = true;
 static bool arg_allow_interactive_authorization = true;
+static usec_t arg_timeout = 0;
 
 static void pager_open_if_enabled(void) {
 
@@ -1494,7 +1495,7 @@ static int call(sd_bus *bus, char *argv[]) {
                 return 0;
         }
 
-        r = sd_bus_call(bus, m, 0, &error, &reply);
+        r = sd_bus_call(bus, m, arg_timeout, &error, &reply);
         if (r < 0) {
                 log_error("%s", bus_error_message(&error, r));
                 return r;
@@ -1627,7 +1628,7 @@ static int set_property(sd_bus *bus, char *argv[]) {
                 return -EINVAL;
         }
 
-        r = sd_bus_call(bus, m, 0, &error, NULL);
+        r = sd_bus_call(bus, m, arg_timeout, &error, NULL);
         if (r < 0) {
                 log_error("%s", bus_error_message(&error, r));
                 return r;
@@ -1659,7 +1660,8 @@ static int help(void) {
                "     --expect-reply=BOOL  Expect a method call reply\n"
                "     --auto-start=BOOL    Auto-start destination service\n"
                "     --allow-interactive-authorization=BOOL\n"
-               "                          Allow interactive authorization for operation\n\n"
+               "                          Allow interactive authorization for operation\n"
+               "     --timeout=SECS       Maximum time to wait for method call completion\n\n"
                "Commands:\n"
                "  list                    List bus names\n"
                "  status SERVICE          Show service name status\n"
@@ -1699,6 +1701,7 @@ static int parse_argv(int argc, char *argv[]) {
                 ARG_EXPECT_REPLY,
                 ARG_AUTO_START,
                 ARG_ALLOW_INTERACTIVE_AUTHORIZATION,
+                ARG_TIMEOUT,
         };
 
         static const struct option options[] = {
@@ -1723,6 +1726,7 @@ static int parse_argv(int argc, char *argv[]) {
                 { "expect-reply", required_argument, NULL, ARG_EXPECT_REPLY },
                 { "auto-start",   required_argument, NULL, ARG_AUTO_START   },
                 { "allow-interactive-authorization", required_argument, NULL, ARG_ALLOW_INTERACTIVE_AUTHORIZATION },
+                { "timeout",      required_argument, NULL, ARG_TIMEOUT      },
                 {},
         };
 
@@ -1856,6 +1860,15 @@ static int parse_argv(int argc, char *argv[]) {
                         arg_allow_interactive_authorization = !!r;
                         break;
 
+                case ARG_TIMEOUT:
+                        r = parse_sec(optarg, &arg_timeout);
+                        if (r < 0) {
+                                log_error("Failed to parse --timeout= parameter.");
+                                return r;
+                        }
+
+                        break;
+
                 case '?':
                         return -EINVAL;