#include #include #include "mallocvar.h" #include "xmlrpc-c/lock.h" #include "xmlrpc-c/lock_pthread.h" static lockAcquireFn acquire; static void acquire(struct lock * const lockP) { pthread_mutex_t * const mutexP = lockP->implementationP; pthread_mutex_lock(mutexP); } static lockReleaseFn release; static void release(struct lock * const lockP) { pthread_mutex_t * const mutexP = lockP->implementationP; pthread_mutex_unlock(mutexP); } static lockDestroyFn destroy; static void destroy(struct lock * const lockP) { pthread_mutex_t * const mutexP = lockP->implementationP; pthread_mutex_destroy(mutexP); free(mutexP); free(lockP); } struct lock * xmlrpc_lock_create_pthread(void) { struct lock * lockP; MALLOCVAR(lockP); if (lockP) { pthread_mutex_t * mutexP; MALLOCVAR(mutexP); if (mutexP) { pthread_mutex_init(mutexP, NULL); lockP->implementationP = mutexP; lockP->acquire = &acquire; lockP->release = &release; lockP->destroy = &destroy; } else { free(lockP); lockP = NULL; } } return lockP; }