switch_time_set_monotonic(switch_true(val));
} else if (!strcasecmp(var, "enable-softtimer-timerfd")) {
switch_time_set_timerfd(switch_true(val));
- if (switch_true(val)) {
- switch_clear_flag((&runtime), SCF_CALIBRATE_CLOCK);
- }
} else if (!strcasecmp(var, "enable-clock-nanosleep")) {
switch_time_set_nanosleep(switch_true(val));
} else if (!strcasecmp(var, "enable-cond-yield")) {
static int MONO = 0;
#endif
+/* clock_nanosleep works badly on some kernels but really well on others.
+ timerfd seems to work well as long as it exists so if you have timerfd we'll also enable clock_nanosleep by default.
+*/
#if defined(HAVE_TIMERFD_CREATE)
-// We'll default this to 1 after we have had some positive feedback that it works well
-static int TFD = 0;
+static int TFD = 1;
+#if defined(HAVE_CLOCK_NANOSLEEP)
+static int NANO = 1;
#else
-static int TFD = 0;
+static int NANO = 0;
#endif
-
+#else
+static int TFD = 0;
static int NANO = 0;
+#endif
static int OFFSET = 0;
#if defined(HAVE_TIMERFD_CREATE)
TFD = enable ? 1 : 0;
switch_time_sync();
+
#else
TFD = 0;
#endif
switch_time_set_cond_yield(SWITCH_FALSE);
}
+ if (TFD) {
+ switch_clear_flag((&runtime), SCF_CALIBRATE_CLOCK);
+ }
+
if (switch_test_flag((&runtime), SCF_CALIBRATE_CLOCK)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Calibrating timer, please wait...\n");
switch_time_calibrate_clock();