tevent: Add an internal function tevent_epoll_set_panic_fallback().
authorJeremy Allison <jra@samba.org>
Mon, 11 Feb 2013 18:43:39 +0000 (10:43 -0800)
committerJeremy Allison <jra@samba.org>
Thu, 14 Feb 2013 18:19:38 +0000 (10:19 -0800)
Can be set externally, allows us to fallback if epoll
fails at runtime.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/tevent/tevent_epoll.c
lib/tevent/tevent_internal.h

index c7936d3c949a0c8220dc93bdabfa9f969eb84d0d..8a48d1d33d1872a937d51b6081db6b22c3914337 100644 (file)
@@ -39,8 +39,32 @@ struct epoll_event_context {
        int epoll_fd;
 
        pid_t pid;
+
+       bool (*panic_fallback)(struct tevent_context *ev, bool replay);
 };
 
+/*
+  called to set the panic fallback function.
+*/
+_PRIVATE_ bool tevent_epoll_set_panic_fallback(struct tevent_context *ev,
+                               bool (*panic_fallback)(struct tevent_context *ev,
+                                                      bool replay))
+{
+       struct epoll_event_context *epoll_ev;
+
+       if (ev->additional_data == NULL) {
+               return false;
+       }
+
+       epoll_ev = talloc_get_type(ev->additional_data,
+                               struct epoll_event_context);
+       if (epoll_ev == NULL) {
+               return false;
+       }
+       epoll_ev->panic_fallback = panic_fallback;
+       return true;
+}
+
 /*
   called when a epoll call fails
 */
index f09cf576b2796e9bb0e7982a5fcdec903f9bdebf..4e9cd69213dd6bbd058afbb7e1fea9cd8abd0ecb 100644 (file)
@@ -318,6 +318,9 @@ bool tevent_poll_init(void);
 bool tevent_poll_mt_init(void);
 #ifdef HAVE_EPOLL
 bool tevent_epoll_init(void);
+bool tevent_epoll_set_panic_fallback(struct tevent_context *ev,
+                       bool (*panic_fallback)(struct tevent_context *ev,
+                                              bool replay));
 #endif
 
 void tevent_trace_point_callback(struct tevent_context *ev,