From 353fb3dfbb516906d5cf20b7c9032e189a558288 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Fri, 11 May 2007 03:41:06 +0000 Subject: [PATCH] make pthread mutexes nested. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5144 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/iax/src/iax-mutex.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/libs/iax/src/iax-mutex.c b/libs/iax/src/iax-mutex.c index bfbb9d4d57..4838bad0ef 100644 --- a/libs/iax/src/iax-mutex.c +++ b/libs/iax/src/iax-mutex.c @@ -40,22 +40,40 @@ struct mutex { mutex_status_t iax_mutex_create(mutex_t **mutex) { + mutex_status_t status = MUTEX_FAILURE; +#ifndef WIN32 + pthread_mutexattr_t attr; +#endif mutex_t *check = NULL; check = (mutex_t *)malloc(sizeof(**mutex)); if (!check) - return MUTEX_FAILURE; + goto done; #ifdef WIN32 InitializeCriticalSection(&check->mutex); #else - if (pthread_mutex_init(&check->mutex, NULL)) - return MUTEX_FAILURE; + if (pthread_mutexattr_init(&attr)) + goto done; + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) + goto fail; + + if (pthread_mutex_init(&check->mutex, &attr)) + goto fail; + + goto success; + +fail: + pthread_mutexattr_destroy(&mattr); + goto done; + +success: #endif - *mutex = check; + status = MUTEX_SUCCESS; - return MUTEX_SUCCESS; +done: + return status; } mutex_status_t iax_mutex_destroy(mutex_t *mutex)