diff --git a/test/fence.cpp b/test/fence.cpp
index 7949bfbb176b..4ce6dfa23590 100644
--- a/test/fence.cpp
+++ b/test/fence.cpp
@@ -315,8 +315,9 @@ int FenceTest::run()
 
 	/* Loop for one second. */
 	Timer timer;
-	timer.start(1000ms);
-	while (timer.isRunning() && expectedCompletionResult_) {
+	timer.start(500ms * (signalledRequestId_ + 1));
+	while (timer.isRunning() && expectedCompletionResult_ &&
+	       completedRequestId_ <= signalledRequestId_ + 1) {
 		if (completedRequestId_ == signalledRequestId_ - 1 && setFence_)
 			/*
 			 * signalledRequestId_ has just completed and it has
