Module: kamailio
Branch: master
Commit: d8b78bfaab25f9a73a67d813cfa930a6eb754bfa
URL: 
https://github.com/kamailio/kamailio/commit/d8b78bfaab25f9a73a67d813cfa930a6eb754bfa

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2015-11-13T09:16:35+01:00

htable: ability to create more than one timer process

---

Modified: modules/htable/ht_api.c
Modified: modules/htable/htable.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/d8b78bfaab25f9a73a67d813cfa930a6eb754bfa.diff
Patch: 
https://github.com/kamailio/kamailio/commit/d8b78bfaab25f9a73a67d813cfa930a6eb754bfa.patch

---

diff --git a/modules/htable/ht_api.c b/modules/htable/ht_api.c
index 4e272cc..bc20c08 100644
--- a/modules/htable/ht_api.c
+++ b/modules/htable/ht_api.c
@@ -964,6 +964,8 @@ int ht_has_autoexpire(void)
        return 0;
 }
 
+extern int ht_timer_procs;
+
 void ht_timer(unsigned int ticks, void *param)
 {
        ht_t *ht;
@@ -971,18 +973,24 @@ void ht_timer(unsigned int ticks, void *param)
        ht_cell_t *it0;
        time_t now;
        int i;
+       int istart;
+       int istep;
 
        if(_ht_root==NULL)
                return;
 
        now = time(NULL);
-       
+
+       istart = (int)(long)param;
+       if(ht_timer_procs<=0) istep = 1;
+       else istep = ht_timer_procs;
+
        ht = _ht_root;
        while(ht)
        {
                if(ht->htexpire>0)
                {
-                       for(i=0; i<ht->htsize; i++)
+                       for(i=istart; i<ht->htsize; i+=istep)
                        {
                                /* free entries */
                                ht_slot_lock(ht, i);
diff --git a/modules/htable/htable.c b/modules/htable/htable.c
index 3e803fe..7f55be1 100644
--- a/modules/htable/htable.c
+++ b/modules/htable/htable.c
@@ -212,7 +212,7 @@ static int mod_init(void)
                                return -1;
                        }
                } else {
-                       register_sync_timers(1);
+                       register_sync_timers(ht_timer_procs);
                }
        }
 
@@ -232,15 +232,18 @@ static int child_init(int rank)
        struct sip_msg *fmsg;
        struct run_act_ctx ctx;
        int rtb, rt;
+       int i;
 
        LM_DBG("rank is (%d)\n", rank);
 
        if(rank==PROC_MAIN) {
                if(ht_timer_procs>0) {
-                       if(fork_sync_timer(PROC_TIMER, "HTable Timer", 1 
/*socks flag*/,
-                                       ht_timer, NULL, ht_timer_interval)<0) {
-                               LM_ERR("failed to start timer routine as 
process\n");
-                               return -1; /* error */
+                       for(i=0; i<ht_timer_procs; i++) {
+                               if(fork_sync_timer(PROC_TIMER, "HTable Timer", 
1 /*socks flag*/,
+                                               ht_timer, (void*)(long)i, 
ht_timer_interval)<0) {
+                                       LM_ERR("failed to start timer routine 
as process\n");
+                                       return -1; /* error */
+                               }
                        }
                }
        }


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

Reply via email to