]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
initial check in of cross platform thread and mutex abstraction (just recursive mutex...
authorMichael Jerris <mike@jerris.com>
Sun, 20 May 2007 20:30:31 +0000 (20:30 +0000)
committerMichael Jerris <mike@jerris.com>
Sun, 20 May 2007 20:30:31 +0000 (20:30 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@55 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/freetdm/openzap.vcproj
libs/freetdm/src/Makefile
libs/freetdm/src/include/zap_threadmutex.h [new file with mode: 0644]
libs/freetdm/src/zap_threadmutex.c [new file with mode: 0644]

index bdcaead1226d8d85693cf45f61152ba466700edf..455a3bbf6ea5b27b39ae305e1e7ab5ff090aa58a 100644 (file)
                                        />\r
                                </FileConfiguration>\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\src\zap_threadmutex.c"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\src\zap_wanpipe.c"\r
                                >\r
                                RelativePath=".\src\include\zap_skel.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\src\include\zap_threadmutex.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\src\include\zap_wanpipe.h"\r
                                >\r
index 301d5836a949b8647eb2ae1ef0abc40246c9814a..8ec0c6dd2db10bc8acebf54e9cde0973d0190b15 100644 (file)
@@ -30,7 +30,7 @@
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-OBJS=hashtable.o hashtable_itr.o openzap.o zap_config.o g711.o libteletone_detect.o libteletone_generate.o zap_buffer.o
+OBJS=hashtable.o hashtable_itr.o openzap.o zap_config.o g711.o libteletone_detect.o libteletone_generate.o zap_buffer.o zap_threadmutex.o
 CFLAGS=$(ZAP_CFLAGS) -Iinclude 
 MYLIB=libopenzap.a
 TMP=-I../../libpri-1.2.4 -Iinclude -I. -w
diff --git a/libs/freetdm/src/include/zap_threadmutex.h b/libs/freetdm/src/include/zap_threadmutex.h
new file mode 100644 (file)
index 0000000..091520f
--- /dev/null
@@ -0,0 +1,37 @@
+/* 
+ * Cross Platform Thread/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 _ZAP_THREADMUTEX_H
+#define _ZAP_THREADMUTEX_H
+
+typedef struct mutex mutex_t;
+
+typedef enum mutex_status {
+       MUTEX_SUCCESS,
+       MUTEX_FAILURE
+} mutex_status_t;
+
+mutex_status_t zap_mutex_create(mutex_t **mutex);
+mutex_status_t zap_mutex_destroy(mutex_t *mutex);
+mutex_status_t zap_mutex_lock(mutex_t *mutex);
+mutex_status_t zap_mutex_trylock(mutex_t *mutex);
+mutex_status_t zap_mutex_unlock(mutex_t *mutex);
+
+#endif
diff --git a/libs/freetdm/src/zap_threadmutex.c b/libs/freetdm/src/zap_threadmutex.c
new file mode 100644 (file)
index 0000000..6fee969
--- /dev/null
@@ -0,0 +1,124 @@
+/* 
+ * Cross Platform Thread/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. 
+ *
+ */
+
+#define _XOPEN_SOURCE 600
+#include <stdlib.h>
+#include "zap_threadmutex.h"
+
+
+#ifdef WIN32
+#define _WIN32_WINNT 0x0400
+#include <windows.h>
+struct mutex {
+       CRITICAL_SECTION mutex;
+};
+
+#else
+
+#include <pthread.h>
+struct mutex {
+       pthread_mutex_t mutex;
+};
+
+#endif
+
+
+mutex_status_t zap_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)
+               goto done;
+#ifdef WIN32
+       InitializeCriticalSection(&check->mutex);
+#else
+       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(&attr);
+               goto done;
+
+success:
+#endif
+       *mutex = check;
+       status = MUTEX_SUCCESS;
+
+done:
+       return status;
+}
+
+mutex_status_t zap_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 zap_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 zap_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 zap_mutex_unlock(mutex_t *mutex)
+{
+#ifdef WIN32
+       LeaveCriticalSection(&mutex->mutex);
+#else
+       if (pthread_mutex_unlock(&mutex->mutex))
+               return MUTEX_FAILURE;
+#endif
+       return MUTEX_SUCCESS;
+}