From ecd1660f17ea257ea005253babcc773f0e9f7180 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 22 Nov 2018 14:04:45 +0100 Subject: [PATCH] exec: increase maximum execution time to 120s Increase the maximum possible execution time to 120 seconds and add a new command line flag `-t` which allows overwriting the default value. Signed-off-by: Jo-Philipp Wich --- exec.c | 2 +- include/rpcd/exec.h | 3 ++- main.c | 17 ++++++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/exec.c b/exec.c index f7bfcb2..146e62b 100644 --- a/exec.c +++ b/exec.c @@ -350,7 +350,7 @@ rpc_exec(const char **args, rpc_exec_write_cb_t in, uloop_process_add(&c->process); c->timeout.cb = rpc_exec_timeout_cb; - uloop_timeout_set(&c->timeout, RPC_EXEC_MAX_RUNTIME); + uloop_timeout_set(&c->timeout, exec_timeout); if (c->stdin_cb) { diff --git a/include/rpcd/exec.h b/include/rpcd/exec.h index efe4cca..01981fe 100644 --- a/include/rpcd/exec.h +++ b/include/rpcd/exec.h @@ -24,7 +24,7 @@ #include #define RPC_EXEC_MAX_SIZE (4096 * 64) -#define RPC_EXEC_MAX_RUNTIME (30 * 1000) +#define RPC_EXEC_DEFAULT_TIMEOUT (120 * 1000) #define ustream_for_each_read_buffer(stream, ptr, len) \ for (ptr = ustream_get_read_buf(stream, &len); \ @@ -50,6 +50,7 @@ ustream_fd_init(&us, fd); \ } while(0) +extern int exec_timeout; typedef int (*rpc_exec_write_cb_t)(struct ustream *, void *); typedef int (*rpc_exec_read_cb_t)(struct blob_buf *, char *, int, void *); diff --git a/main.c b/main.c index 7c161b5..b246997 100644 --- a/main.c +++ b/main.c @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -32,6 +33,8 @@ static struct ubus_context *ctx; static bool respawn = false; +int exec_timeout = RPC_EXEC_DEFAULT_TIMEOUT; + static void handle_signal(int sig) { @@ -64,16 +67,28 @@ int main(int argc, char **argv) const char *ubus_socket = NULL; int ch; - while ((ch = getopt(argc, argv, "s:")) != -1) { + while ((ch = getopt(argc, argv, "s:t:")) != -1) { switch (ch) { case 's': ubus_socket = optarg; break; + + case 't': + exec_timeout = strtol(optarg, NULL, 0); + break; + default: break; } } + if (exec_timeout < 1 || exec_timeout > 600) { + fprintf(stderr, "Invalid execution timeout specified\n"); + return -1; + } + + exec_timeout *= 1000; + if (stat(RPC_UCI_DIR_PREFIX, &s)) mkdir(RPC_UCI_DIR_PREFIX, 0700); -- 2.25.1