X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fworker.c;h=ce4a53b26051505d5e995b335c7cbee87e72adef;hb=780325b5b8d4c0552b4b7719e0a38200d99f6b08;hp=b281d70b7183dc56a7e81209862099b1c1adb4d6;hpb=df7a5a97f07783cddad373ea69cbab1a0876e426;p=sliver-openvswitch.git diff --git a/lib/worker.c b/lib/worker.c index b281d70b7..ce4a53b26 100644 --- a/lib/worker.c +++ b/lib/worker.c @@ -37,6 +37,11 @@ VLOG_DEFINE_THIS_MODULE(worker); +/* ovs_assert() logs the assertion message and logging sometimes goes through a + * worker, so using ovs_assert() in this source file could cause recursion. */ +#undef ovs_assert +#define ovs_assert use_assert_instead_of_ovs_assert_in_this_module + /* Header for an RPC request. */ struct worker_request { size_t request_len; /* Length of the payload in bytes. */ @@ -237,11 +242,14 @@ worker_request_iovec(const struct iovec iovs[], size_t n_iovs, worker_request_func *request_cb, worker_reply_func *reply_cb, void *aux) { + static bool recursing = false; struct worker_request rq; struct iovec *all_iovs; int error; assert(worker_is_running()); + assert(!recursing); + recursing = true; rq.request_len = iovec_len(iovs, n_iovs); rq.request_cb = request_cb; @@ -255,6 +263,8 @@ worker_request_iovec(const struct iovec iovs[], size_t n_iovs, VLOG_ABORT("send failed (%s)", strerror(error)); } free(all_iovs); + + recursing = false; } /* Closes the client socket, if any, so that worker_is_running() will return @@ -335,7 +345,7 @@ worker_reply_iovec(const struct iovec *iovs, size_t n_iovs, * to avoid missing log messages. */ VLOG_INFO("send failed (%s)", strerror(error)); } else if (error) { - VLOG_ABORT("send failed (%s)", strerror(error)); + VLOG_FATAL("send failed (%s)", strerror(error)); } free(all_iovs); @@ -369,7 +379,7 @@ worker_main(int fd) /* Main process closed the IPC socket. Exit cleanly. */ break; } else if (error != EAGAIN) { - VLOG_ABORT("RPC receive failed (%s)", strerror(error)); + VLOG_FATAL("RPC receive failed (%s)", ovs_retval_to_string(error)); } poll_fd_wait(server_sock, POLLIN); @@ -442,8 +452,6 @@ rxbuf_run(struct rxbuf *rx, int sock, size_t header_len) } } } - - return EAGAIN; } static struct iovec *