aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-msgport.c
diff options
context:
space:
mode:
Diffstat (limited to 'e-util/e-msgport.c')
-rw-r--r--e-util/e-msgport.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/e-util/e-msgport.c b/e-util/e-msgport.c
index 34a6391ad7..dc55156dc7 100644
--- a/e-util/e-msgport.c
+++ b/e-util/e-msgport.c
@@ -906,6 +906,25 @@ void e_mutex_assert_locked(EMutex *m)
pthread_mutex_unlock(&m->mutex);
}
+int e_mutex_cond_wait(void *vcond, EMutex *m)
+{
+ int ret;
+ pthread_cond_t *cond = vcond;
+
+ switch(m->type) {
+ case E_MUTEX_SIMPLE:
+ return pthread_cond_wait(cond, &m->mutex);
+ case E_MUTEX_REC:
+ if (pthread_mutex_lock(&m->mutex) == -1)
+ return -1;
+ g_assert(m->owner == pthread_self());
+ ret = pthread_cond_wait(cond, &m->mutex);
+ g_assert(m->owner == pthread_self());
+ pthread_mutex_unlock(&m->mutex);
+ return ret;
+ }
+}
+
#ifdef STANDALONE
EMsgPort *server_port;