summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-11-22 14:04:45 +0100
committerJo-Philipp Wich <jo@mein.io>2018-11-22 14:28:28 +0100
commitecd1660f17ea257ea005253babcc773f0e9f7180 (patch)
tree7d69f9309858f53323571b9052182139a91afb6d
parent41333abee4c57e3de2bcfa08972954e2af20705a (diff)
downloadrpcd-ecd1660f17ea257ea005253babcc773f0e9f7180.tar.gz
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 <jo@mein.io>
-rw-r--r--exec.c2
-rw-r--r--include/rpcd/exec.h3
-rw-r--r--main.c17
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 <libubox/ustream.h>
#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 <unistd.h>
+#include <stdlib.h>
#include <libubox/blobmsg_json.h>
#include <libubus.h>
@@ -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);