summaryrefslogtreecommitdiffstats
path: root/xlators/performance/io-threads/src/io-threads.c
diff options
context:
space:
mode:
authorShehjar Tikoo <shehjart@gluster.com>2009-06-10 01:25:38 +0000
committerAnand V. Avati <avati@dev.gluster.com>2009-06-11 06:29:17 -0700
commit1c4d58fe57162a5247356dc95aa6204f26cbf4fe (patch)
treeec76072bc37f4d91baac23c0ec1aad7efb9dc1cc /xlators/performance/io-threads/src/io-threads.c
parentbd2b529fd3d1965ccfe8cc03f9223ed1e98f7e79 (diff)
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 <avati@dev.gluster.com>
Diffstat (limited to 'xlators/performance/io-threads/src/io-threads.c')
-rw-r--r--xlators/performance/io-threads/src/io-threads.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/xlators/performance/io-threads/src/io-threads.c b/xlators/performance/io-threads/src/io-threads.c
index f16833609..c3575654b 100644
--- a/xlators/performance/io-threads/src/io-threads.c
+++ b/xlators/performance/io-threads/src/io-threads.c
@@ -79,16 +79,15 @@ int
iot_notify_wait (iot_worker_t *worker, int idletime)
{
struct timeval tv;
- struct timespec ts;
+ struct timespec ts = {0, };
int waitres = 0;
gettimeofday (&tv, NULL);
- ts.tv_sec = tv.tv_sec + idletime;
/* Slightly skew the idle time for threads so that, we dont
* have all of them rushing to exit at the same time, if
* they've been idle.
*/
- ts.tv_nsec = skew_usec_idle_time (tv.tv_usec) * 1000;
+ ts.tv_sec = skew_sec_idle_time (tv.tv_sec + idletime);
#ifndef HAVE_SPINLOCK
waitres = pthread_cond_timedwait (&worker->notifier, &worker->qlock,