[sr-dev] git:master:4fb0dc4a: rtimer: Allow multiple timer processes per timer
Alex Hermann
alex at speakup.nl
Wed Aug 3 08:19:21 CEST 2016
Module: kamailio
Branch: master
Commit: 4fb0dc4a6fb13a2cedacfe20fb80641a9a8915b3
URL: https://github.com/kamailio/kamailio/commit/4fb0dc4a6fb13a2cedacfe20fb80641a9a8915b3
Author: Alex Hermann <alex at speakup.nl>
Committer: Alex Hermann <alex at speakup.nl>
Date: 2016-08-02T12:26:21+02:00
rtimer: Allow multiple timer processes per timer
Reuse the mode parameter to specify the number of processes handling the timer.
---
Modified: modules/rtimer/README
Modified: modules/rtimer/doc/rtimer_admin.xml
Modified: modules/rtimer/rtimer_mod.c
---
Diff: https://github.com/kamailio/kamailio/commit/4fb0dc4a6fb13a2cedacfe20fb80641a9a8915b3.diff
Patch: https://github.com/kamailio/kamailio/commit/4fb0dc4a6fb13a2cedacfe20fb80641a9a8915b3.patch
---
diff --git a/modules/rtimer/README b/modules/rtimer/README
index cafd917..98dd0cd 100644
--- a/modules/rtimer/README
+++ b/modules/rtimer/README
@@ -87,7 +87,9 @@ Chapter 1. Admin Guide
The parameter can be set multiple times to get more timers in same
configuration file.
* name - name of the timer.
- * mode - if set to 1, will create a new timer process.
+ * mode - if set to 0, the timer will use the main (shared) timer. Any
+ number > 0 will create the specified amount of new timer processes
+ (which will only be handling this timer).
* interval - timer interval in seconds or micro-seconds (the value
must be ended in 'u'). For micro-seconds intervals, mode is set
always to 1.
diff --git a/modules/rtimer/doc/rtimer_admin.xml b/modules/rtimer/doc/rtimer_admin.xml
index 73ee0e4..7b099ef 100644
--- a/modules/rtimer/doc/rtimer_admin.xml
+++ b/modules/rtimer/doc/rtimer_admin.xml
@@ -81,8 +81,9 @@
</listitem>
<listitem>
<para>
- <emphasis>mode</emphasis> - if set to 1, will create a new timer
- process.
+ <emphasis>mode</emphasis> - if set to 0, the timer will use the main
+ (shared) timer. Any number > 0 will create the specified amount of
+ new timer processes (which will only be handling this timer).
</para>
</listitem>
<listitem>
diff --git a/modules/rtimer/rtimer_mod.c b/modules/rtimer/rtimer_mod.c
index a15a08c..3a1e56a 100644
--- a/modules/rtimer/rtimer_mod.c
+++ b/modules/rtimer/rtimer_mod.c
@@ -127,7 +127,7 @@ static int mod_init(void)
return -1;
}
} else {
- register_basic_timers(1);
+ register_basic_timers(it->mode);
}
it = it->next;
}
@@ -138,6 +138,9 @@ static int mod_init(void)
static int child_init(int rank)
{
stm_timer_t *it;
+ int i;
+ char si_desc[MAX_PT_DESC];
+
if(_stm_list==NULL)
return 0;
@@ -147,18 +150,20 @@ static int child_init(int rank)
it = _stm_list;
while(it)
{
- if(it->mode!=0)
+ for(i=0; i<it->mode; i++)
{
+ snprintf(si_desc, MAX_PT_DESC, "RTIMER EXEC child=%d timer=%.*s",
+ i, it->name.len, it->name.s);
if(it->flags & RTIMER_INTERVAL_USEC)
{
- if(fork_basic_utimer(PROC_TIMER, "RTIMER USEC EXEC", 1 /*socks flag*/,
+ if(fork_basic_utimer(PROC_TIMER, si_desc, 1 /*socks flag*/,
stm_timer_exec, (void*)it, it->interval
/*usec*/)<0) {
LM_ERR("failed to start utimer routine as process\n");
return -1; /* error */
}
} else {
- if(fork_basic_timer(PROC_TIMER, "RTIMER SEC EXEC", 1 /*socks flag*/,
+ if(fork_basic_timer(PROC_TIMER, si_desc, 1 /*socks flag*/,
stm_timer_exec, (void*)it, it->interval
/*sec*/)<0) {
LM_ERR("failed to start timer routine as process\n");
@@ -236,7 +241,9 @@ int stm_t_param(modparam_t type, void *val)
|| pit->body.s[pit->body.len-1]=='U') {
pit->body.len--;
tmp.flags |= RTIMER_INTERVAL_USEC;
- tmp.mode = 1;
+ if (tmp.mode==0) {
+ tmp.mode = 1;
+ }
}
if (str2int(&pit->body, &tmp.interval) < 0) {
LM_ERR("invalid interval: %.*s\n", pit->body.len, pit->body.s);
More information about the sr-dev
mailing list