From 0b72293d1a22af11e46b89cd60e2c3f34377a4df Mon Sep 17 00:00:00 2001
From: Michael Tuexen <tuexen@fh-muenster.de>
Date: Wed, 15 Jun 2016 20:15:38 +0200
Subject: [PATCH] Get blocking system calls working on FreeBSD.

This fixes a bug on non-Linux system for the handling of
blocking system calls. While waiting, release the state
mutex.
Sponsored by Netflix.
---
 gtests/net/packetdrill/run.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/gtests/net/packetdrill/run.c b/gtests/net/packetdrill/run.c
index 778e2b59..574c0cca 100644
--- a/gtests/net/packetdrill/run.c
+++ b/gtests/net/packetdrill/run.c
@@ -318,6 +318,7 @@ void wait_for_event(struct state *state)
 			state, state->event->time_usecs);
 	DEBUGP("waiting until %lld -- now is %lld\n",
 	       event_usecs, now_usecs());
+	run_unlock(state);
 	while (1) {
 		const s64 wait_usecs = event_usecs - now_usecs();
 		if (wait_usecs <= 0)
@@ -333,9 +334,7 @@ void wait_for_event(struct state *state)
 		 * event we're waiting for and then spin.
 		 */
 		if (wait_usecs > MAX_SPIN_USECS) {
-			run_unlock(state);
 			usleep(wait_usecs - MAX_SPIN_USECS);
-			run_lock(state);
 		}
 #endif
 
@@ -343,7 +342,7 @@ void wait_for_event(struct state *state)
 		 * two to wait, so we spin.
 		 */
 	}
-
+	run_lock(state);
 	check_event_time(state, now_usecs());
 }
 
-- 
GitLab