Module: check_mk
Branch: master
Commit: 32d62a74aa565f0c37000bb4d8e8234179722136
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=32d62a74aa565f…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Mon Nov 16 14:13:05 2015 +0100
No manual pthread_mutex_* fiddling/(un)locking in livestatus anymore.
---
livestatus/src/Query.cc | 19 ++++++++++++-------
livestatus/src/waittriggers.c | 2 --
livestatus/src/waittriggers.h | 1 -
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/livestatus/src/Query.cc b/livestatus/src/Query.cc
index 50a4e96..27649f0 100644
--- a/livestatus/src/Query.cc
+++ b/livestatus/src/Query.cc
@@ -37,6 +37,7 @@
#include "Column.h"
#include "Filter.h"
#include "InputBuffer.h"
+#include "Mutex.h"
#include "NegatingFilter.h"
#include "NullColumn.h"
#include "OringFilter.h"
@@ -54,8 +55,15 @@ extern int g_debug_level;
extern unsigned long g_max_response_size;
extern int g_data_encoding;
+using mk::lock_guard;
+using mk::mutex;
using std::string;
+namespace {
+
+mutex g_wait_mutex;
+
+};
Query::Query(InputBuffer *input, OutputBuffer *output, Table *table) :
_output(output),
@@ -1350,17 +1358,14 @@ void Query::doWait()
if (_wait_timeout == 0) {
if (g_debug_level >= 2)
logger(LG_INFO, "Waiting unlimited until condition becomes
true");
- pthread_mutex_lock(&g_wait_mutex);
- pthread_cond_wait(&g_wait_cond[_wait_trigger], &g_wait_mutex);
- pthread_mutex_unlock(&g_wait_mutex);
+ lock_guard<mutex> lg(g_wait_mutex);
+ pthread_cond_wait(&g_wait_cond[_wait_trigger],
g_wait_mutex.native_handle());
}
else {
if (g_debug_level >= 2)
logger(LG_INFO, "Waiting %d ms or until condition becomes
true", _wait_timeout);
- pthread_mutex_lock(&g_wait_mutex);
- int ret = pthread_cond_timedwait(&g_wait_cond[_wait_trigger],
&g_wait_mutex, &timeout);
- pthread_mutex_unlock(&g_wait_mutex);
- if (ret == ETIMEDOUT) {
+ lock_guard<mutex> lg(g_wait_mutex);
+ if (pthread_cond_timedwait(&g_wait_cond[_wait_trigger],
g_wait_mutex.native_handle(), &timeout) == ETIMEDOUT) {
if (g_debug_level >= 2)
logger(LG_INFO, "WaitTimeout after %d ms", _wait_timeout);
return; // timeout occurred. do not wait any longer
diff --git a/livestatus/src/waittriggers.c b/livestatus/src/waittriggers.c
index cf8a4ba..ddc5e45 100644
--- a/livestatus/src/waittriggers.c
+++ b/livestatus/src/waittriggers.c
@@ -48,8 +48,6 @@ pthread_cond_t g_wait_cond[] = {
PTHREAD_COND_INITIALIZER,
};
-pthread_mutex_t g_wait_mutex = PTHREAD_MUTEX_INITIALIZER;
-
void trigger(int what)
{
pthread_cond_broadcast(&g_wait_cond[WT_ALL]);
diff --git a/livestatus/src/waittriggers.h b/livestatus/src/waittriggers.h
index 2ea0d02..6cc8bfd 100644
--- a/livestatus/src/waittriggers.h
+++ b/livestatus/src/waittriggers.h
@@ -53,6 +53,5 @@ void trigger(int what);
extern const char *wt_names[];
extern pthread_cond_t g_wait_cond[];
-extern pthread_mutex_t g_wait_mutex;
#endif // waittriggers_h