file: access exec timeout via daemon ops structure

Since the plugin is not linked, but dlopen()'d with RTLD_LOCAL, we cannot
access global rpcd variables but need to access them via the common ops
structure symbol.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2018-11-28 12:12:04 +01:00
parent 7235f34895
commit 3aa81d0dfa

6
file.c
View file

@ -53,6 +53,8 @@
us.stream.notify_state = rpc_file_##name##_state_cb; \ us.stream.notify_state = rpc_file_##name##_state_cb; \
ustream_fd_init(&us, fd); ustream_fd_init(&us, fd);
static const struct rpc_daemon_ops *ops;
struct rpc_file_exec_context { struct rpc_file_exec_context {
struct ubus_context *context; struct ubus_context *context;
struct ubus_request_data request; struct ubus_request_data request;
@ -690,7 +692,7 @@ rpc_file_exec_run(const char *cmd,
uloop_process_add(&c->process); uloop_process_add(&c->process);
c->timeout.cb = rpc_file_exec_timeout_cb; c->timeout.cb = rpc_file_exec_timeout_cb;
uloop_timeout_set(&c->timeout, rpc_exec_timeout); uloop_timeout_set(&c->timeout, *ops->exec_timeout);
close(opipe[1]); close(opipe[1]);
close(epipe[1]); close(epipe[1]);
@ -742,6 +744,8 @@ rpc_file_api_init(const struct rpc_daemon_ops *o, struct ubus_context *ctx)
.n_methods = ARRAY_SIZE(file_methods), .n_methods = ARRAY_SIZE(file_methods),
}; };
ops = o;
return ubus_add_object(ctx, &obj); return ubus_add_object(ctx, &obj);
} }