[sr-dev] git:master: core/timer: added support for basic mili-second timers

Daniel-Constantin Mierla miconda at gmail.com
Wed Dec 14 23:19:42 CET 2011


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 <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at 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




More information about the sr-dev mailing list