diff options
Diffstat (limited to 'res')
-rw-r--r-- | res/res_timing_dahdi.c | 18 | ||||
-rw-r--r-- | res/res_timing_pthread.c | 35 | ||||
-rw-r--r-- | res/res_timing_timerfd.c | 23 |
3 files changed, 38 insertions, 38 deletions
diff --git a/res/res_timing_dahdi.c b/res/res_timing_dahdi.c index 1e1150bfe..bb0b72679 100644 --- a/res/res_timing_dahdi.c +++ b/res/res_timing_dahdi.c @@ -25,8 +25,6 @@ /*** MODULEINFO <depend>dahdi</depend> - <conflict>res_timing_timerfd</conflict> - <conflict>res_timing_pthread</conflict> ***/ #include "asterisk.h" @@ -52,10 +50,12 @@ static int dahdi_timer_set_rate(int handle, unsigned int rate); static void dahdi_timer_ack(int handle, unsigned int quantity); static int dahdi_timer_enable_continuous(int handle); static int dahdi_timer_disable_continuous(int handle); -static enum ast_timing_event dahdi_timer_get_event(int handle); +static enum ast_timer_event dahdi_timer_get_event(int handle); static unsigned int dahdi_timer_get_max_rate(int handle); -static struct ast_timing_functions dahdi_timing_functions = { +static struct ast_timing_interface dahdi_timing = { + .name = "DAHDI", + .priority = 100, .timer_open = dahdi_timer_open, .timer_close = dahdi_timer_close, .timer_set_rate = dahdi_timer_set_rate, @@ -112,7 +112,7 @@ static int dahdi_timer_disable_continuous(int handle) return ioctl(handle, DAHDI_TIMERPONG, &flags) ? -1 : 0; } -static enum ast_timing_event dahdi_timer_get_event(int handle) +static enum ast_timer_event dahdi_timer_get_event(int handle) { int res; int event; @@ -184,17 +184,13 @@ static int load_module(void) return AST_MODULE_LOAD_DECLINE; } - return (timing_funcs_handle = ast_install_timing_functions(&dahdi_timing_functions)) ? + return (timing_funcs_handle = ast_register_timing_interface(&dahdi_timing)) ? AST_MODULE_LOAD_SUCCESS : AST_MODULE_LOAD_DECLINE; } static int unload_module(void) { - /* ast_uninstall_timing_functions(timing_funcs_handle); */ - - /* This module can not currently be unloaded. No use count handling is being done. */ - - return -1; + return ast_unregister_timing_interface(timing_funcs_handle); } AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "DAHDI Timing Interface"); diff --git a/res/res_timing_pthread.c b/res/res_timing_pthread.c index 0afe9c9bf..a45287588 100644 --- a/res/res_timing_pthread.c +++ b/res/res_timing_pthread.c @@ -23,11 +23,6 @@ * \brief pthread timing interface */ -/*** MODULEINFO - <conflict>res_timing_timerfd</conflict> - <conflict>res_timing_dahdi</conflict> - ***/ - #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$"); @@ -50,10 +45,12 @@ static int pthread_timer_set_rate(int handle, unsigned int rate); static void pthread_timer_ack(int handle, unsigned int quantity); static int pthread_timer_enable_continuous(int handle); static int pthread_timer_disable_continuous(int handle); -static enum ast_timing_event pthread_timer_get_event(int handle); +static enum ast_timer_event pthread_timer_get_event(int handle); static unsigned int pthread_timer_get_max_rate(int handle); -static struct ast_timing_functions pthread_timing_functions = { +static struct ast_timing_interface pthread_timing = { + .name = "pthread", + .priority = 0, /* use this as a last resort */ .timer_open = pthread_timer_open, .timer_close = pthread_timer_close, .timer_set_rate = pthread_timer_set_rate, @@ -255,10 +252,10 @@ static int pthread_timer_disable_continuous(int handle) return 0; } -static enum ast_timing_event pthread_timer_get_event(int handle) +static enum ast_timer_event pthread_timer_get_event(int handle) { struct pthread_timer *timer; - enum ast_timing_event res = AST_TIMING_EVENT_EXPIRED; + enum ast_timer_event res = AST_TIMING_EVENT_EXPIRED; if (!(timer = find_timer(handle, 0))) { return res; @@ -491,22 +488,26 @@ static int load_module(void) return AST_MODULE_LOAD_DECLINE; } - return (timing_funcs_handle = ast_install_timing_functions(&pthread_timing_functions)) ? + return (timing_funcs_handle = ast_register_timing_interface(&pthread_timing)) ? AST_MODULE_LOAD_SUCCESS : AST_MODULE_LOAD_DECLINE; } static int unload_module(void) { -#if 0 - /* XXX code to stop the timing thread ... */ + int res; - ast_uninstall_timing_functions(timing_funcs_handle); - ao2_ref(pthread_timers, -1); -#endif + ast_mutex_lock(&timing_thread.lock); + timing_thread.stop = 1; + ast_cond_signal(&timing_thread.cond); + ast_mutex_unlock(&timing_thread.lock); + pthread_join(timing_thread.thread, NULL); - /* This module can not currently be unloaded. No use count handling is being done. */ + if (!(res = ast_unregister_timing_interface(timing_funcs_handle))) { + ao2_ref(pthread_timers, -1); + pthread_timers = NULL; + } - return -1; + return res; } AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "pthread Timing Interface"); diff --git a/res/res_timing_timerfd.c b/res/res_timing_timerfd.c index 60dc2d5ef..b1cbb04bd 100644 --- a/res/res_timing_timerfd.c +++ b/res/res_timing_timerfd.c @@ -25,8 +25,6 @@ /*** MODULEINFO <depend>timerfd</depend> - <conflict>res_timing_pthread</conflict> - <conflict>res_timing_dahdi</conflict> ***/ #include "asterisk.h" @@ -48,10 +46,12 @@ static int timerfd_timer_set_rate(int handle, unsigned int rate); static void timerfd_timer_ack(int handle, unsigned int quantity); static int timerfd_timer_enable_continuous(int handle); static int timerfd_timer_disable_continuous(int handle); -static enum ast_timing_event timerfd_timer_get_event(int handle); +static enum ast_timer_event timerfd_timer_get_event(int handle); static unsigned int timerfd_timer_get_max_rate(int handle); -static struct ast_timing_functions timerfd_timing_functions = { +static struct ast_timing_interface timerfd_timing = { + .name = "timerfd", + .priority = 200, .timer_open = timerfd_timer_open, .timer_close = timerfd_timer_close, .timer_set_rate = timerfd_timer_set_rate, @@ -226,9 +226,9 @@ static int timerfd_timer_disable_continuous(int handle) return res; } -static enum ast_timing_event timerfd_timer_get_event(int handle) +static enum ast_timer_event timerfd_timer_get_event(int handle) { - enum ast_timing_event res; + enum ast_timer_event res; struct timerfd_timer *our_timer, find_helper = { .handle = handle, }; @@ -259,7 +259,7 @@ static int load_module(void) return AST_MODULE_LOAD_DECLINE; } - if (!(timing_funcs_handle = ast_install_timing_functions(&timerfd_timing_functions))) { + if (!(timing_funcs_handle = ast_register_timing_interface(&timerfd_timing))) { ao2_ref(timerfd_timers, -1); return AST_MODULE_LOAD_DECLINE; } @@ -269,11 +269,14 @@ static int load_module(void) static int unload_module(void) { - /* ast_uninstall_timing_functions(timing_funcs_handle); */ + int res; - /* This module can not currently be unloaded. No use count handling is being done. */ + if (!(res = ast_unregister_timing_interface(timing_funcs_handle))) { + ao2_ref(timerfd_timers, -1); + timerfd_timers = NULL; + } - return -1; + return res; } AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Timerfd Timing Interface"); |