From: Mathieu Desnoyers Date: Mon, 5 Jan 2015 21:43:08 +0000 (-0500) Subject: Fix: exit threads not only on goto restart X-Git-Tag: v2.5.4~22 X-Git-Url: http://git.liburcu.org/?p=lttng-tools.git;a=commitdiff_plain;h=b859ccea85cffdd0a068d7bf37d1a5862c3ab9ba Fix: exit threads not only on goto restart Exit threads as soon as number of FD is 0, on every loop (no need for goto restart special case). Number of FD being 0 is a sufficient condition for exiting the thread: it means the quit pipe has been removed from the poll set. Signed-off-by: Mathieu Desnoyers Signed-off-by: Jérémie Galarneau --- diff --git a/src/common/consumer.c b/src/common/consumer.c index 129203fa5..5041ed951 100644 --- a/src/common/consumer.c +++ b/src/common/consumer.c @@ -2180,14 +2180,6 @@ void *consumer_thread_metadata_poll(void *data) DBG("Metadata main loop started"); while (1) { - health_code_update(); - - /* Only the metadata pipe is set */ - if (LTTNG_POLL_GETNB(&events) == 0 && consumer_quit == 1) { - err = 0; /* All is OK */ - goto end; - } - restart: health_code_update(); health_poll_entry(); @@ -2202,7 +2194,10 @@ restart: ERR("Poll EINTR catched"); goto restart; } - goto error; + if (LTTNG_POLL_GETNB(&events) == 0) { + err = 0; /* All is OK */ + } + goto end; } nb_fd = ret; @@ -2758,14 +2753,6 @@ void *consumer_thread_channel_poll(void *data) DBG("Channel main loop started"); while (1) { - health_code_update(); - - /* Only the channel pipe is set */ - if (LTTNG_POLL_GETNB(&events) == 0 && consumer_quit == 1) { - err = 0; /* All is OK */ - goto end; - } - restart: health_code_update(); DBG("Channel poll wait"); @@ -2780,6 +2767,9 @@ restart: ERR("Poll EINTR catched"); goto restart; } + if (LTTNG_POLL_GETNB(&events) == 0) { + err = 0; /* All is OK */ + } goto end; }