From 926121113b903bf7b6133f782c84d0ed6c1a1a58 Mon Sep 17 00:00:00 2001 From: Karl Vogel Date: Tue, 11 Feb 2014 09:37:08 +0100 Subject: [PATCH] uloop: Add flag to allow callback to be called on error conditions. In some conditions, an application is interested in errors happening on a file descriptor and might be able to resolve the issue in the callback function. This patch adds a flag to notify the uloop framework that errors should be passed to the callback function, instead of silently removing the fd from the polling set. Signed-off-by: Karl Vogel --- uloop.c | 6 ++++-- uloop.h | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/uloop.c b/uloop.c index 0566d80..d293edb 100644 --- a/uloop.c +++ b/uloop.c @@ -174,7 +174,8 @@ static int uloop_fetch_events(int timeout) if (events[n].flags & EV_ERROR) { u->error = true; - uloop_fd_delete(u); + if (!(u->flags & ULOOP_ERROR_CB)) + uloop_fd_delete(u); } if(events[n].filter == EVFILT_READ) @@ -268,7 +269,8 @@ static int uloop_fetch_events(int timeout) if (events[n].events & (EPOLLERR|EPOLLHUP)) { u->error = true; - uloop_fd_delete(u); + if (!(u->flags & ULOOP_ERROR_CB)) + uloop_fd_delete(u); } if(!(events[n].events & (EPOLLRDHUP|EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP))) { diff --git a/uloop.h b/uloop.h index 98dd818..7564514 100644 --- a/uloop.h +++ b/uloop.h @@ -53,6 +53,8 @@ typedef void (*uloop_process_handler)(struct uloop_process *c, int ret); #define ULOOP_EDGE_DEFER (1 << 5) #endif +#define ULOOP_ERROR_CB (1 << 6) + struct uloop_fd { uloop_fd_handler cb;