diff options
Diffstat (limited to 'src/test/immutable_object_cache/test_common.h')
-rw-r--r-- | src/test/immutable_object_cache/test_common.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/test/immutable_object_cache/test_common.h b/src/test/immutable_object_cache/test_common.h new file mode 100644 index 000000000..9d6fd14c7 --- /dev/null +++ b/src/test/immutable_object_cache/test_common.h @@ -0,0 +1,41 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +#ifndef CACHE_TEST_COMMON_H +#define CACHE_TEST_COMMON_H + +#include <pthread.h> + +class WaitEvent { +public: + WaitEvent() : m_signaled(false) { + pthread_mutex_init(&m_lock, NULL); + pthread_cond_init(&m_cond, NULL); + } + + ~WaitEvent() { + pthread_mutex_destroy(&m_lock); + pthread_cond_destroy(&m_cond); + } + + void wait() { + pthread_mutex_lock(&m_lock); + while (!m_signaled) { + pthread_cond_wait(&m_cond, &m_lock); + } + m_signaled = false; + pthread_mutex_unlock(&m_lock); + } + + void signal() { + pthread_mutex_lock(&m_lock); + m_signaled = true; + pthread_cond_signal(&m_cond); + pthread_mutex_unlock(&m_lock); + } +private: + pthread_mutex_t m_lock; + pthread_cond_t m_cond; + bool m_signaled; +}; + +#endif |