]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
small timer test tweak for horribly clocked boxen
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 22 Feb 2010 22:42:29 +0000 (22:42 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 22 Feb 2010 22:42:29 +0000 (22:42 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16725 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_time.c

index 4816a4c684a16b15d30168f824231cbfd790973f..3af5efadcbdf163b8d41800d066e2553023beadd 100644 (file)
@@ -181,12 +181,20 @@ SWITCH_DECLARE(void) switch_time_calibrate_clock(void)
 {
        int x;
        switch_interval_time_t avg, val = 1000, want = 1000;
-       int over = 0, under = 0, good = 0, step = 50, diff = 0, retry = 0, lastgood = 0;
+       int over = 0, under = 0, good = 0, step = 50, diff = 0, retry = 0, lastgood = 0, one_k = 0;
 
 #ifdef HAVE_CLOCK_GETRES
        struct timespec ts;
+       long res = 0;
        clock_getres(CLOCK_MONOTONIC, &ts);
-       if (ts.tv_nsec / 1000 > 1500) {
+       res = ts.tv_nsec / 1000;
+
+
+       if (res > 900 && res < 1100) {
+               one_k = 1;
+       }
+       
+       if (res > 1500) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
                                                  "Timer resolution of %ld microseconds detected!\n"
                                                  "Do you have your kernel timer set to higher than 1 kHz? You may experience audio problems.\n", ts.tv_nsec / 1000);
@@ -260,6 +268,10 @@ SWITCH_DECLARE(void) switch_time_calibrate_clock(void)
                OFFSET = (int) (want - lastgood);
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Timer offset of %d calculated (fallback)\n", OFFSET);
                switch_time_set_cond_yield(SWITCH_TRUE);
+       } else if (one_k) {
+               OFFSET = 900;
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Timer offset CANNOT BE DETECTED, forcing OFFSET to 900\n");
+               switch_time_set_cond_yield(SWITCH_TRUE);
        } else {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Timer offset NOT calculated\n");
                switch_time_set_cond_yield(SWITCH_TRUE);