From e00d3f52ccc6496a60992ac5a9d771b1d067eceb Mon Sep 17 00:00:00 2001 From: Haiqing Bai Date: Thu, 22 Nov 2018 08:42:48 +0000 Subject: [PATCH] Fixed 100% CPU using issue by adding minimum POSIX timer interval Added minimum POSIX timer interval to prevent from timers firing to quickly for the process to handle, resulting in 100% CPU and endless signal queue. Upstream-status: Backport [From commit 1f0baae98a7b23e85f2bfd8f5de64795421c270e: - critical: added minimum POSIX timer interval to prevent from timers firing to quickly for the process to handle, resulting in 100% CPU and endless signal queue] Signed-off-by: Haiqing Bai --- src/dep/eventtimer.h | 3 ++- src/dep/eventtimer_itimer.c | 2 +- src/dep/eventtimer_posix.c | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/dep/eventtimer.h b/src/dep/eventtimer.h index 64e483a..0a21318 100644 --- a/src/dep/eventtimer.h +++ b/src/dep/eventtimer.h @@ -30,7 +30,8 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#define EVENTTIMER_MAX_DESC 20 +#define EVENTTIMER_MAX_DESC 20 +#define EVENTTIMER_MIN_INTERVAL_US 250 /* 4000/sec */ typedef struct EventTimer EventTimer; diff --git a/src/dep/eventtimer_itimer.c b/src/dep/eventtimer_itimer.c index cf3c6db..3bb7ec6 100644 --- a/src/dep/eventtimer_itimer.c +++ b/src/dep/eventtimer_itimer.c @@ -53,7 +53,7 @@ #include "../ptpd.h" -#define US_TIMER_INTERVAL (62500) +#define US_TIMER_INTERVAL (31250) static volatile unsigned int elapsed; diff --git a/src/dep/eventtimer_posix.c b/src/dep/eventtimer_posix.c index 637eef3..f4a702d 100644 --- a/src/dep/eventtimer_posix.c +++ b/src/dep/eventtimer_posix.c @@ -100,6 +100,10 @@ eventTimerStart_posix(EventTimer *timer, double interval) ts.tv_sec = interval; ts.tv_nsec = (interval - ts.tv_sec) * 1E9; + if(!ts.tv_sec && ts.tv_nsec < EVENTTIMER_MIN_INTERVAL_US * 1000) { + ts.tv_nsec = EVENTTIMER_MIN_INTERVAL_US * 1000; + } + DBGV("Timer %s start requested at %d.%4d sec interval\n", timer->id, ts.tv_sec, ts.tv_nsec); its.it_interval = ts; -- 2.11.0