diff --git a/libs/iax/libiax2.vcproj b/libs/iax/libiax2.vcproj index 5a5a5fa4ce..ce7a04c30f 100644 --- a/libs/iax/libiax2.vcproj +++ b/libs/iax/libiax2.vcproj @@ -147,6 +147,10 @@ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > + + @@ -189,6 +193,10 @@ RelativePath=".\src\iax-client.h" > + + diff --git a/libs/iax/src/Makefile.am b/libs/iax/src/Makefile.am index ba87808bc0..0f7f1b8b3e 100644 --- a/libs/iax/src/Makefile.am +++ b/libs/iax/src/Makefile.am @@ -8,8 +8,8 @@ AM_CFLAGS += $(UCFLAGS) pkgdir = $(libdir) pkg_LTLIBRARIES=libiax.la -libiax_la_SOURCES = iax2-parser.c iax.c md5.c jitterbuf.c +libiax_la_SOURCES = iax2-parser.c iax.c md5.c jitterbuf.c iax-mutex.c library_includedir = $(prefix)/include/iax -library_include_HEADERS = md5.h frame.h iax-client.h iax2.h iax2-parser.h iax.h +library_include_HEADERS = md5.h frame.h iax-client.h iax2.h iax2-parser.h iax.h iax-mutex.h noinst_HEADERS = jitterbuf.h diff --git a/libs/iax/src/iax-mutex.c b/libs/iax/src/iax-mutex.c new file mode 100644 index 0000000000..6fd82e7d5b --- /dev/null +++ b/libs/iax/src/iax-mutex.c @@ -0,0 +1,105 @@ +/* + * Simple Mutex abstraction + * Copyright(C) 2007 Michael Jerris + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so. + * + * This work is provided under this license on an "as is" basis, without warranty of any kind, + * either expressed or implied, including, without limitation, warranties that the covered code + * is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire + * risk as to the quality and performance of the covered code is with you. Should any covered + * code prove defective in any respect, you (not the initial developer or any other contributor) + * assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty + * constitutes an essential part of this license. No use of any covered code is authorized hereunder + * except under this disclaimer. + * + */ + + +#include "iax-mutex.h" + + +#ifdef WIN32 +#define _WIN32_WINNT 0x0400 +#include +struct mutex { + CRITICAL_SECTION mutex; +}; + +#else + +#include +struct mutex { + pthread_mutex_t mutex; +}; + +#endif + + +mutex_status_t mutex_create(mutex_t **mutex) +{ + mutex_t *check = NULL; + + check = (mutex_t *)malloc(sizeof(**mutex)); + if (!check) + return MUTEX_FAILURE; +#ifdef WIN32 + InitializeCriticalSection(&check->mutex); +#else + if (pthread_mutex_init(&check->mutex, NULL)) + return MUTEX_FAILURE; + +#endif + + *mutex = check; + + return MUTEX_SUCCESS; +} + +mutex_status_t mutex_destroy(mutex_t *mutex) +{ +#ifdef WIN32 + DeleteCriticalSection(&mutex->mutex); +#else + if (pthread_mutex_destroy(&mutex->mutex)) + return MUTEX_FAILURE; +#endif + free(mutex); + return MUTEX_SUCCESS; +} + +mutex_status_t mutex_lock(mutex_t *mutex) +{ +#ifdef WIN32 + EnterCriticalSection(&mutex->mutex); +#else + if (pthread_mutex_lock(&mutex->mutex)) + return MUTEX_FAILURE; +#endif + return MUTEX_SUCCESS; +} + +mutex_status_t mutex_trylock(mutex_t *mutex) +{ +#ifdef WIN32 + if (!TryEnterCriticalSection(&mutex->mutex)) + return MUTEX_FAILURE; +#else + if (pthread_mutex_trylock(&mutex->mutex)) + return MUTEX_FAILURE; +#endif + return MUTEX_SUCCESS; +} + +mutex_status_t mutex_unlock(mutex_t *mutex) +{ +#ifdef WIN32 + LeaveCriticalSection(&mutex->mutex); +#else + if (pthread_mutex_unlock(&mutex->mutex)) + return MUTEX_FAILURE; +#endif + return MUTEX_SUCCESS; +} diff --git a/libs/iax/src/iax-mutex.h b/libs/iax/src/iax-mutex.h new file mode 100644 index 0000000000..1c0f407b8e --- /dev/null +++ b/libs/iax/src/iax-mutex.h @@ -0,0 +1,37 @@ +/* + * Simple Mutex abstraction + * Copyright(C) 2007 Michael Jerris + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so. + * + * This work is provided under this license on an "as is" basis, without warranty of any kind, + * either expressed or implied, including, without limitation, warranties that the covered code + * is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire + * risk as to the quality and performance of the covered code is with you. Should any covered + * code prove defective in any respect, you (not the initial developer or any other contributor) + * assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty + * constitutes an essential part of this license. No use of any covered code is authorized hereunder + * except under this disclaimer. + * + */ + + +#ifndef _SIMPLE_ABSTRACT_MUTEX_H +#define _SIMPLE_ABSTRACT_MUTEX_H + +typedef struct mutex mutex_t; + +typedef enum mutex_status { + MUTEX_SUCCESS, + MUTEX_FAILURE +} mutex_status_t; + +mutex_status_t mutex_create(mutex_t **mutex); +mutex_status_t mutex_destroy(mutex_t *mutex); +mutex_status_t mutex_lock(mutex_t *mutex); +mutex_status_t mutex_trylock(mutex_t *mutex); +mutex_status_t mutex_unlock(mutex_t *mutex); + +#endif