summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
Diffstat (limited to 'res')
-rw-r--r--res/res_timing_dahdi.c18
-rw-r--r--res/res_timing_pthread.c35
-rw-r--r--res/res_timing_timerfd.c23
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");