summaryrefslogtreecommitdiffhomepage
path: root/proto-shell.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-10-15 19:06:28 +0200
committerFelix Fietkau <nbd@openwrt.org>2011-10-15 19:06:28 +0200
commit6b3f6f4466e5584f2bdefc55b3ca34186b65acb9 (patch)
treee604a886feccbd1a6017035470b8c0749b98050b /proto-shell.c
parent8c4dface377cf03de38c642b90940530e47296d3 (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.c13
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]);