From f7f33ec8890f885437e17f2f72e69221e7326781 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Tue, 2 Feb 2010 00:31:06 +0100 Subject: [PATCH] Fix the flow manager sleeping for way too long in some situations. --- src/flow.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/flow.c b/src/flow.c index 8cd2d7c7dd..7fec7ca57e 100644 --- a/src/flow.c +++ b/src/flow.c @@ -703,14 +703,16 @@ void *FlowManagerThread(void *td) /* If we are reading a pcap, how long the pcap timestamps * says that has passed */ TimeGet(&tsdiff); - if (tsdiff.tv_sec == ts.tv_sec && tsdiff.tv_usec - ts.tv_usec < 10 - && tsdiff.tv_usec != ts.tv_usec) { + + if (tsdiff.tv_sec == ts.tv_sec && + tsdiff.tv_usec > ts.tv_usec && + tsdiff.tv_usec - ts.tv_usec < 10) { /* if it has passed less than 10 usec, sleep that usecs */ sleeping += tsdiff.tv_usec - ts.tv_usec; usleep(tsdiff.tv_usec - ts.tv_usec); } else { /* Else update the sleeping var but don't sleep so long */ - if (tsdiff.tv_sec == ts.tv_sec && tsdiff.tv_usec != ts.tv_usec) + if (tsdiff.tv_sec == ts.tv_sec && tsdiff.tv_usec > ts.tv_usec) sleeping += tsdiff.tv_usec - ts.tv_usec; else if (tsdiff.tv_sec == ts.tv_sec + 1) sleeping += tsdiff.tv_usec + (1000000 - ts.tv_usec);