提交 acd36896 authored 作者: Christopher Rienzo's avatar Christopher Rienzo

FS-4064 mod_posix_timer workaround of CentOS 5 glibc problem

上级 42834083
all:
gcc ../mod_posix_timer.c main.c switch.c -I. -o timer_test -lpthread -lrt -g -DLOG_LEVEL=-1
gcc ../mod_posix_timer.c main.c switch.c -I. -o timer_test -lpthread -lrt -lm -g -DLOG_LEVEL=-1
clean:
-rm timer_test
......
......@@ -42,13 +42,17 @@ switch_status_t switch_thread_cond_create(switch_thread_cond_t **cond, switch_me
return pthread_cond_init(*cond, NULL);
}
switch_status_t switch_thread_cond_timedwait(switch_thread_cond_t *cond, switch_mutex_t *mutex, int wait)
switch_status_t switch_thread_cond_timedwait(switch_thread_cond_t *cond, switch_mutex_t *mutex, long wait)
{
struct timespec dur = { 0, 0 };
clock_gettime(CLOCK_REALTIME, &dur);
dur.tv_sec = wait / 1000000000;
dur.tv_nsec = wait % 1000000000;
return pthread_cond_timedwait(cond, mutex, &dur);
struct timespec abs_time = { 0, 0 };
/* add wait duration to current time (wait is in microseconds, pthreads wants nanosecond resolution) */
clock_gettime(CLOCK_REALTIME, &abs_time);
abs_time.tv_sec += wait / 1000000;
abs_time.tv_nsec += (wait % 1000000) * 1000;
/* handle overflow of tv_nsec */
abs_time.tv_sec += abs_time.tv_nsec / 1000000000;
abs_time.tv_nsec = abs_time.tv_nsec % 1000000000;
return pthread_cond_timedwait(cond, mutex, &abs_time);
}
switch_status_t switch_thread_cond_broadcast(switch_thread_cond_t *cond)
......
......@@ -9,12 +9,15 @@
#define SWITCH_STATUS_SUCCESS 0
#define SWITCH_STATUS_GENERR 1
#define SWITCH_STATUS_FALSE 2
#define SWITCH_STATUS_TERM 3
#define SWITCH_MUTEX_NESTED 1
#define SWITCH_CHANNEL_LOG 0
#define SWITCH_LOG_DEBUG 0
#define SWITCH_LOG_INFO 0
#define SWITCH_LOG_ERROR 1
typedef int switch_status_t;
typedef size_t switch_size_t;
......@@ -113,7 +116,7 @@ switch_status_t switch_mutex_init(switch_mutex_t **mutex, int flags, switch_memo
switch_status_t switch_thread_cond_create(switch_thread_cond_t **cond, switch_memory_pool_t *pool);
switch_status_t switch_thread_cond_timedwait(switch_thread_cond_t *cond, switch_mutex_t *mutex, int wait);
switch_status_t switch_thread_cond_timedwait(switch_thread_cond_t *cond, switch_mutex_t *mutex, long wait);
switch_status_t switch_thread_cond_broadcast(switch_thread_cond_t *cond);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论