From 1c4d58fe57162a5247356dc95aa6204f26cbf4fe Mon Sep 17 00:00:00 2001 From: Shehjar Tikoo Date: Wed, 10 Jun 2009 01:25:38 +0000 Subject: io-threads: Fix missed notification in sem_timedwait We're performing a calculation for skewing idle time that resulted in a timespec.tv_nsec value becoming larger than 1000 million or less than 0, forcing sem_timedwait to return with an EINVAL instead of waiting for a request notification from sem_post in iot_notify_worker(). This resulted in a missed notification that resulted in a hang followed by a timeout on the protocol/client side. This commit avoids the over- and under-flow in tv_nsec by skewing the tv_sec value instead. Signed-off-by: Anand V. Avati --- xlators/performance/io-threads/src/io-threads.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'xlators/performance/io-threads/src/io-threads.h') diff --git a/xlators/performance/io-threads/src/io-threads.h b/xlators/performance/io-threads/src/io-threads.h index ec17356942b..3e806aa78e9 100644 --- a/xlators/performance/io-threads/src/io-threads.h +++ b/xlators/performance/io-threads/src/io-threads.h @@ -58,8 +58,8 @@ typedef enum { }iot_state_t; #define iot_worker_active(wrk) ((wrk)->state == IOT_STATE_ACTIVE) -#define MAX_IDLE_SKEW 1000 /* usecs */ -#define skew_usec_idle_time(usec) ((usec) + (random () % MAX_IDLE_SKEW)) +#define MAX_IDLE_SKEW 4 /* In secs */ +#define skew_sec_idle_time(sec) ((sec) + (random () % MAX_IDLE_SKEW)) #define IOT_DEFAULT_IDLE 180 /* In secs. */ #define IOT_MIN_THREADS 2 -- cgit