From: Sapan Bhatia Date: Thu, 10 May 2012 18:30:23 +0000 (-0400) Subject: Work around a kernel issue with futexes X-Git-Tag: 1.1.4-2~1 X-Git-Url: http://git.onelab.eu/?p=fprobe-ulog.git;a=commitdiff_plain;h=0752dba4308c57a5177b467e611b1f4c202e7fa7 Work around a kernel issue with futexes --- diff --git a/src/fprobe-ulog.c b/src/fprobe-ulog.c index ae855bd..c77c638 100644 --- a/src/fprobe-ulog.c +++ b/src/fprobe-ulog.c @@ -831,7 +831,10 @@ void *emit_thread() gettimeofday(&now, 0); timeout.tv_sec = now.tv_sec + emit_timeout; /* Do not wait until emit_packet will filled - it may be too long */ - if (pthread_cond_timedwait(&emit_cond, &emit_mutex, &timeout) && emit_count) { + int res=-1; + while ((res=pthread_cond_timedwait(&emit_cond, &emit_mutex, &timeout))==-1) continue; + + if (res && emit_count) { //my_log(LOG_INFO,"Timeout: %d, %d",emit_count, timeout.tv_sec); pthread_mutex_unlock(&emit_mutex); goto sendit; @@ -964,7 +967,8 @@ void *unpending_thread() while (!(pending_tail->flags & FLOW_PENDING)) { gettimeofday(&now, 0); timeout.tv_sec = now.tv_sec + unpending_timeout; - pthread_cond_timedwait(&unpending_cond, &unpending_mutex, &timeout); + while (pthread_cond_timedwait(&unpending_cond, &unpending_mutex, &timeout)==-1) + continue; } #if ((DEBUG) & (DEBUG_S | DEBUG_U)) @@ -1010,7 +1014,8 @@ void *scan_thread() for (;;) { gettime(&now); timeout.tv_sec = now.sec + scan_interval; - pthread_cond_timedwait(&scan_cond, &scan_mutex, &timeout); + while (pthread_cond_timedwait(&scan_cond, &scan_mutex, &timeout)==-1) + continue; gettime(&now); #if ((DEBUG) & DEBUG_S)