From: Florian Forster Date: Tue, 6 Jul 2010 11:00:32 +0000 (+0200) Subject: src/plugin.c: Check "read_loop" when returning from "pthread_cond_timedwait". X-Git-Tag: collectd-4.9.3~2 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=dd28a7dbb9404672d850063f3e58ee8dc6debb20 src/plugin.c: Check "read_loop" when returning from "pthread_cond_timedwait". Otherwise it may take up to $Interval seconds until all read threads shut down. This bug was introduced in version 4.8.4 (commit dbe1a7d). --- diff --git a/src/plugin.c b/src/plugin.c index 5ff21c66..84a5abf2 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -379,12 +379,15 @@ static void *plugin_read_thread (void __attribute__((unused)) *args) * we need to re-evaluate the condition every time * pthread_cond_timedwait returns. */ rc = 0; - while (!timeout_reached(rf->rf_next_read) && rc == 0) { + while ((read_loop != 0) + && !timeout_reached(rf->rf_next_read) + && rc == 0) + { rc = pthread_cond_timedwait (&read_cond, &read_lock, &rf->rf_next_read); } - /* Must hold `real_lock' when accessing `rf->rf_type'. */ + /* Must hold `read_lock' when accessing `rf->rf_type'. */ rf_type = rf->rf_type; pthread_mutex_unlock (&read_lock);