diff options
Diffstat (limited to 'res')
-rw-r--r-- | res/res_timing_dahdi.c | 16 | ||||
-rw-r--r-- | res/res_timing_pthread.c | 30 |
2 files changed, 25 insertions, 21 deletions
diff --git a/res/res_timing_dahdi.c b/res/res_timing_dahdi.c index 55791e678..bb0b72679 100644 --- a/res/res_timing_dahdi.c +++ b/res/res_timing_dahdi.c @@ -50,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, @@ -110,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; @@ -182,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 c8e50e7f1..a45287588 100644 --- a/res/res_timing_pthread.c +++ b/res/res_timing_pthread.c @@ -45,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, @@ -250,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; @@ -486,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"); |