00001
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <stdlib.h>
00037 #include <pthread.h>
00038 #include <errno.h>
00039 #include "mutex.h"
00040
00041
00042 int mutex_init(mutex_t *m)
00043 {
00044 if (m == 0)
00045 return -1;
00046 if (m->pthread_mutex == 0) {
00047 if ((m->pthread_mutex = malloc(sizeof(pthread_mutex_t)))
00048 == NULL)
00049 return -ENOMEM;
00050 }
00051 return pthread_mutex_init((pthread_mutex_t*)m->pthread_mutex, NULL);
00052 }
00053
00054
00055 int mutex_lock(mutex_t *m)
00056 {
00057 if (m == 0)
00058 return -1;
00059 return pthread_mutex_lock((pthread_mutex_t*)m->pthread_mutex);
00060 }
00061
00062
00063 int mutex_trylock(mutex_t *m)
00064 {
00065 if (m == 0)
00066 return -1;
00067 return pthread_mutex_trylock((pthread_mutex_t*)m->pthread_mutex);
00068 }
00069
00070
00071 int mutex_unlock(mutex_t *m)
00072 {
00073 if (m == 0)
00074 return -1;
00075 return pthread_mutex_unlock((pthread_mutex_t*)m->pthread_mutex);
00076 }
00077
00078
00079 int mutex_destroy(mutex_t *m)
00080 {
00081 int error = -1;
00082 if (m == 0)
00083 return error;
00084
00085 if (m->pthread_mutex != 0) {
00086 error = pthread_mutex_destroy(
00087 (pthread_mutex_t*)m->pthread_mutex);
00088 free(m->pthread_mutex);
00089 m->pthread_mutex = 0;
00090 }
00091 return error;
00092 }