We don't have a better way to panic / exit, but at least this allows propagation upwards for better handling later, and in the case of event_fn cleanly exits the node from the cluster by dieing instead of causing potentially more harm when going on. Signed-off-by: Christoph Hellwig Index: sheepdog/sheep/group.c =================================================================== --- sheepdog.orig/sheep/group.c 2012-04-25 10:05:50.604164601 +0200 +++ sheepdog/sheep/group.c 2012-04-25 10:05:55.484164724 +0200 @@ -933,6 +933,7 @@ static void event_fn(struct work *work) static void event_done(struct work *work) { struct event_struct *cevent; + int ret; if (!sys->cur_cevent) vprintf(SDOG_ERR, "bug\n"); @@ -962,7 +963,9 @@ static void event_done(struct work *work vprintf(SDOG_DEBUG, "free %p\n", cevent); event_free(cevent); event_running = 0; - register_event(cdrv_fd, group_handler, NULL); + ret = register_event(cdrv_fd, group_handler, NULL); + if (ret) + panic("failed to register event fd"); if (!list_empty(&sys->event_queue)) process_request_event_queues(); Index: sheepdog/sheep/work.c =================================================================== --- sheepdog.orig/sheep/work.c 2012-04-25 10:05:19.276163797 +0200 +++ sheepdog/sheep/work.c 2012-04-25 10:05:55.484164724 +0200 @@ -219,7 +219,7 @@ static int init_eventfd(void) ret = register_event(efd, bs_thread_request_done, NULL); if (ret) { - eprintf("failed to register event fdL %m\n"); + eprintf("failed to register event fd %m\n"); close(efd); return 1; }