Module: sip-router
Branch: master
Commit: 2f38f2c316bc3c0410ac1bd61747ca8c69480937
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=2f38f2c316bc3c0410ac1bd61747ca8c69480937

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
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


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to