From ae2354be24f73117ab953deb6672a428adea6dae Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 22 Feb 2010 22:42:29 +0000 Subject: [PATCH] small timer test tweak for horribly clocked boxen git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16725 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_time.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/switch_time.c b/src/switch_time.c index 4816a4c684..3af5efadcb 100644 --- a/src/switch_time.c +++ b/src/switch_time.c @@ -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);