diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-10-15 19:06:28 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-10-15 19:06:28 +0200 |
commit | 6b3f6f4466e5584f2bdefc55b3ca34186b65acb9 (patch) | |
tree | e604a886feccbd1a6017035470b8c0749b98050b /proto-shell.c | |
parent | 8c4dface377cf03de38c642b90940530e47296d3 (diff) |
add support for tracking open file descriptors of modules and closing them for created child processes
Diffstat (limited to 'proto-shell.c')
-rw-r--r-- | proto-shell.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/proto-shell.c b/proto-shell.c index d0028c4..c0af99f 100644 --- a/proto-shell.c +++ b/proto-shell.c @@ -18,7 +18,7 @@ #include "interface-ip.h" #include "proto.h" -static int proto_fd; +static struct netifd_fd proto_fd; struct proto_shell_handler { struct list_head list; @@ -469,11 +469,11 @@ proto_shell_attach(const struct proto_handler *h, struct interface *iface, state->proto.cb = proto_shell_handler; state->setup_timeout.cb = proto_shell_setup_timeout_cb; state->setup_task.cb = proto_shell_setup_cb; - state->setup_task.dir_fd = proto_fd; + state->setup_task.dir_fd = proto_fd.fd; state->teardown_task.cb = proto_shell_teardown_cb; - state->teardown_task.dir_fd = proto_fd; + state->teardown_task.dir_fd = proto_fd.fd; state->proto_task.cb = proto_shell_task_cb; - state->proto_task.dir_fd = proto_fd; + state->proto_task.dir_fd = proto_fd.fd; state->handler = container_of(h, struct proto_shell_handler, proto); return &state->proto; @@ -676,10 +676,11 @@ void __init proto_shell_init(void) if (chdir("./proto")) goto close_cur; - proto_fd = open(".", O_RDONLY | O_DIRECTORY); - if (proto_fd < 0) + proto_fd.fd = open(".", O_RDONLY | O_DIRECTORY); + if (proto_fd.fd < 0) goto close_cur; + netifd_fd_add(&proto_fd); glob("./*.sh", 0, NULL, &g); for (i = 0; i < g.gl_pathc; i++) proto_shell_add_script(g.gl_pathv[i]); |