Hash :
309fc7c4
Author :
Date :
2009-01-21T07:51:25
New functions to provide sane threading callbacks with pthreads and win32 threading implementations. svn:r1031
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <pthread.h>
struct event_base;
#include <event2/thread.h>
#include "mm-internal.h"
static void *
evthread_posix_lock_create(void)
{
pthread_mutex_t *lock = mm_malloc(sizeof(pthread_mutex_t));
if (!lock)
return NULL;
pthread_mutex_init(lock, NULL);
return lock;
}
static void
evthread_posix_lock_free(void *_lock)
{
pthread_mutex_t *lock = _lock;
pthread_mutex_destroy(lock);
mm_free(lock);
}
static void
evthread_posix_lock(int mode, void *_lock)
{
pthread_mutex_t *lock = _lock;
if (0 != (mode & EVTHREAD_LOCK))
pthread_mutex_lock(lock);
else
pthread_mutex_unlock(lock);
}
static unsigned long
evthread_posix_get_id(void)
{
union {
pthread_t thr;
unsigned long id;
} r;
r.thr = pthread_self();
return r.id;
}
int
evthread_use_pthreads(struct event_base *base)
{
evthread_set_lock_create_callbacks(base,
evthread_posix_lock_create,
evthread_posix_lock_free);
evthread_set_locking_callback(base, evthread_posix_lock);
evthread_set_id_callback(base, evthread_posix_get_id);
return -1;
}