summaryrefslogtreecommitdiff
path: root/listen.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-01-19 13:39:47 +0100
committerFelix Fietkau <nbd@openwrt.org>2013-01-19 13:39:47 +0100
commit69cfe89ca44466f295ce88faf92aabf187c9cf95 (patch)
tree0c41024ced258691ef02e67ccd1d5926b16bcc85 /listen.c
parent7635644189f73847d9a56911c8883cb7728a34cc (diff)
move listener unblocking to a separate stack context via uloop timer
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'listen.c')
-rw-r--r--listen.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/listen.c b/listen.c
index d51e600..37fc4bb 100644
--- a/listen.c
+++ b/listen.c
@@ -52,7 +52,7 @@ static void uh_block_listener(struct listener *l)
l->blocked = true;
}
-void uh_unblock_listeners(void)
+static void uh_poll_listeners(struct uloop_timeout *timeout)
{
struct listener *l;
@@ -74,6 +74,15 @@ void uh_unblock_listeners(void)
}
}
+void uh_unblock_listeners(void)
+{
+ static struct uloop_timeout poll_timer = {
+ .cb = uh_poll_listeners
+ };
+
+ uloop_timeout_set(&poll_timer, 1);
+}
+
static void listener_cb(struct uloop_fd *fd, unsigned int events)
{
struct listener *l = container_of(fd, struct listener, fd);