Module: sip-router Branch: master Commit: 2f38f2c316bc3c0410ac1bd61747ca8c69480937 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=2f38f2c3...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: Wed Dec 14 23:18:36 2011 +0100
core/timer: added support for basic mili-second timers
- renamed second-based timer functions from dummy to basic
---
timer.h | 2 ++ timer_proc.c | 51 +++++++++++++++++++++++++++++++++++++++++++++------ timer_proc.h | 35 +++++++++++++++++++++++++++++------ 3 files changed, 76 insertions(+), 12 deletions(-)
diff --git a/timer.h b/timer.h index 4adcc8e..d2ba3dd 100644 --- a/timer.h +++ b/timer.h @@ -76,6 +76,8 @@ typedef void (timer_function)(unsigned int ticks, void* param); timer_ticks.h (.e.g TICKS_TO_S(tick) to convert to s or ms )*/ #define TIMER_TICK 1 /* 1 s, kept for compatibility */
+/*function prototype to execute on mili-second based basic timers */ +typedef void (utimer_function)(unsigned int uticks, void* param);
struct timer_ln; /* forward decl */ /* new diff --git a/timer_proc.c b/timer_proc.c index 36e4836..c354fbd 100644 --- a/timer_proc.c +++ b/timer_proc.c @@ -38,17 +38,18 @@ #include "timer_proc.h" #include "cfg/cfg_struct.h" #include "pt.h" +#include "ut.h" #include "mem/shm_mem.h"
#include <unistd.h>
/** - * \brief update internal counters for running new dummy timers - * @param timers number of dummy timer processes + * \brief update internal counters for running new basic sec. timers + * @param timers number of basic timer processes * @return 0 on success; -1 on error */ -int register_dummy_timers(int timers) +int register_basic_timers(int timers) { if(register_procs(timers)<0) return -1; @@ -61,9 +62,9 @@ int register_dummy_timers(int timers) * * Forks a very basic periodic timer process, that just sleep()s for * the specified interval and then calls the timer function. - * The new "dummy timer" process execution start immediately, the sleep() + * The new "basic timer" process execution start immediately, the sleep() * is called first (so the first call to the timer function will happen - * <interval> seconds after the call to fork_dummy_timer) + * <interval> seconds after the call to fork_basic_timer) * @param child_id @see fork_process() * @param desc @see fork_process() * @param make_sock @see fork_process() @@ -73,7 +74,7 @@ int register_dummy_timers(int timers) * @return pid of the new process on success, -1 on error * (doesn't return anything in the child process) */ -int fork_dummy_timer(int child_id, char* desc, int make_sock, +int fork_basic_timer(int child_id, char* desc, int make_sock, timer_function* f, void* param, int interval) { int pid; @@ -94,6 +95,44 @@ int fork_dummy_timer(int child_id, char* desc, int make_sock, return pid; }
+/** + * \brief Forks a separate simple milisecond-sleep() periodic timer + * + * Forks a very basic periodic timer process, that just ms-sleep()s for + * the specified interval and then calls the timer function. + * The new "basic timer" process execution start immediately, the ms-sleep() + * is called first (so the first call to the timer function will happen + * <interval> seconds after the call to fork_basic_utimer) + * @param child_id @see fork_process() + * @param desc @see fork_process() + * @param make_sock @see fork_process() + * @param f timer function/callback + * @param param parameter passed to the timer function + * @param uinterval interval in mili-seconds. + * @return pid of the new process on success, -1 on error + * (doesn't return anything in the child process) + */ +int fork_basic_utimer(int child_id, char* desc, int make_sock, + utimer_function* f, void* param, int uinterval) +{ + int pid; + ticks_t ts; + + pid=fork_process(child_id, desc, make_sock); + if (pid<0) return -1; + if (pid==0){ + /* child */ + if (cfg_child_init()) return -1; + for(;;){ + sleep_us(uinterval); + cfg_update(); + ts = get_ticks_raw(); + f(TICKS_TO_MS(ts), param); /* ticks in mili-seconds */ + } + } + /* parent */ + return pid; +}
/** diff --git a/timer_proc.h b/timer_proc.h index b6c9a66..e6faa7c 100644 --- a/timer_proc.h +++ b/timer_proc.h @@ -35,21 +35,24 @@ #include "local_timer.h"
/** - * \brief update internal counters for running new dummy timers - * @param timers number of dummy timer processes + * \brief update internal counters for running new basic sec. timers + * @param timers number of basic timer processes * @return 0 on success; -1 on error */ -int register_dummy_timers(int timers); +int register_basic_timers(int timers);
+#define register_dummy_timers register_basic_timers + +#define register_basic_utimers register_basic_utimers
/** * \brief Forks a separate simple sleep() periodic timer * * Forks a very basic periodic timer process, that just sleep()s for * the specified interval and then calls the timer function. - * The new "dummy timer" process execution start immediately, the sleep() + * The new "basic timer" process execution start immediately, the sleep() * is called first (so the first call to the timer function will happen - * <interval> seconds after the call to fork_dummy_timer) + * <interval> seconds after the call to fork_basic_timer) * @param child_id @see fork_process() * @param desc @see fork_process() * @param make_sock @see fork_process() @@ -59,11 +62,31 @@ int register_dummy_timers(int timers); * @return pid of the new process on success, -1 on error * (doesn't return anything in the child process) */ -int fork_dummy_timer(int child_id, char* desc, int make_sock, +int fork_basic_timer(int child_id, char* desc, int make_sock, timer_function* f, void* param, int interval);
+#define fork_dummy_timer fork_basic_timer
/** + * \brief Forks a separate simple milisecond-sleep() periodic timer + * + * Forks a very basic periodic timer process, that just ms-sleep()s for + * the specified interval and then calls the timer function. + * The new "basic timer" process execution start immediately, the ms-sleep() + * is called first (so the first call to the timer function will happen + * <interval> seconds after the call to fork_basic_utimer) + * @param child_id @see fork_process() + * @param desc @see fork_process() + * @param make_sock @see fork_process() + * @param f timer function/callback + * @param param parameter passed to the timer function + * @param uinterval interval in mili-seconds. + * @return pid of the new process on success, -1 on error + * (doesn't return anything in the child process) + */ +int fork_basic_utimer(int child_id, char* desc, int make_sock, + timer_function* f, void* param, int uinterval); +/** * \brief Forks a timer process based on the local timer * * Forks a separate timer process running a local_timer.h type of timer