]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
do less work in timer thread to meet silly new kernels half way
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 17 Mar 2008 19:45:39 +0000 (19:45 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 17 Mar 2008 19:45:39 +0000 (19:45 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7907 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_time.c

index eed551ec8fddf5a9ab89b03b995b68d66b802510..0e1160a44c1ce9fa22b604549d209b373bf431d1 100644 (file)
@@ -39,7 +39,7 @@
 #endif
 
 #define MAX_TICK UINT32_MAX - 1024
-
+#define MS_PER_TICK 10
 static switch_memory_pool_t *module_pool = NULL;
 
 static struct {
@@ -364,25 +364,19 @@ SWITCH_MODULE_RUNTIME_FUNCTION(softtimer_runtime)
                        tick = 0;
                }
 
-
-               for (x = 0; x <= MAX_ELEMENTS; x++) {
-                       int i = x, index;
-
-                       if (i == 0) {
-                               i = 1;
-                       }
-                       
-                       index = (current_ms % i == 0) ? i : 0; 
-                       
-                       if (TIMER_MATRIX[index].count) {
-                               TIMER_MATRIX[index].tick++;
-                               if (TIMER_MATRIX[x].tick == MAX_TICK) {
-                                       TIMER_MATRIX[x].tick = 0;
-                                       TIMER_MATRIX[x].roll++;
+               if ((current_ms % MS_PER_TICK) == 0) {
+                       for (x = MS_PER_TICK; x <= MAX_ELEMENTS; x += MS_PER_TICK) {
+                               if ((current_ms % x) == 0) {
+                                       if (TIMER_MATRIX[x].count) {
+                                               TIMER_MATRIX[x].tick++;
+                                               if (TIMER_MATRIX[x].tick == MAX_TICK) {
+                                                       TIMER_MATRIX[x].tick = 0;
+                                                       TIMER_MATRIX[x].roll++;
+                                               }
+                                       }
                                }
                        }
                }
-               
                if (current_ms == MAX_ELEMENTS) {
                        current_ms = 0;
                }