From 6f9819229b3d60cb898a0f9bfc67793b6c40fc2c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 11 Feb 2013 10:48:02 -0800 Subject: [PATCH] tevent: Plumb in the panic fallback code into the epoll_panic() runtime call. Signed-off-by: Jeremy Allison Reviewed-by: Stefan Metzmacher --- lib/tevent/tevent_epoll.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/tevent/tevent_epoll.c b/lib/tevent/tevent_epoll.c index 8a48d1d33d1..0ef1ffe9099 100644 --- a/lib/tevent/tevent_epoll.c +++ b/lib/tevent/tevent_epoll.c @@ -71,9 +71,26 @@ _PRIVATE_ bool tevent_epoll_set_panic_fallback(struct tevent_context *ev, static void epoll_panic(struct epoll_event_context *epoll_ev, const char *reason, bool replay) { - tevent_debug(epoll_ev->ev, TEVENT_DEBUG_FATAL, - "%s (%s) - calling abort()\n", reason, strerror(errno)); - abort(); + struct tevent_context *ev = epoll_ev->ev; + + if (epoll_ev->panic_fallback == NULL) { + tevent_debug(ev, TEVENT_DEBUG_FATAL, + "%s (%s) replay[%u] - calling abort()\n", + reason, strerror(errno), (unsigned)replay); + abort(); + } + + tevent_debug(ev, TEVENT_DEBUG_WARNING, + "%s (%s) replay[%u] - calling panic_fallback\n", + reason, strerror(errno), (unsigned)replay); + + if (!epoll_ev->panic_fallback(ev, replay)) { + /* Fallback failed. */ + tevent_debug(ev, TEVENT_DEBUG_FATAL, + "%s (%s) replay[%u] - calling abort()\n", + reason, strerror(errno), (unsigned)replay); + abort(); + } } /* -- 2.11.4.GIT