From b9ebdbcc648274cc630b6349374f9fb21e53f396 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 18 Jun 2013 12:01:08 +0200 Subject: uloop: fix corner cases with recursive uloop_run calls With multiple recursive calls to uloop_run, the callback for the same fd can be run multiple times from different levels in the stack. Prevent this by tracking the stack of uloop_fd callbacks and buffering new incoming events for fds already on the stack. Signed-off-by: Felix Fietkau --- uloop.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'uloop.h') diff --git a/uloop.h b/uloop.h index 39b9b58..98dd818 100644 --- a/uloop.h +++ b/uloop.h @@ -44,8 +44,13 @@ typedef void (*uloop_process_handler)(struct uloop_process *c, int ret); #define ULOOP_WRITE (1 << 1) #define ULOOP_EDGE_TRIGGER (1 << 2) #define ULOOP_BLOCKING (1 << 3) + +#define ULOOP_EVENT_MASK (ULOOP_READ | ULOOP_WRITE) + +/* internal flags */ +#define ULOOP_EVENT_BUFFERED (1 << 4) #ifdef USE_KQUEUE -#define ULOOP_EDGE_DEFER (1 << 4) +#define ULOOP_EDGE_DEFER (1 << 5) #endif struct uloop_fd -- cgit v1.2.3