diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index 113ea49d50046e5b..ef1601c716bfa137 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -157,6 +157,12 @@ void Capture::requestComplete(Request *request)
 	if (request->status() == Request::RequestCancelled)
 		return;
 
+	captureCount_++;
+	if (captureLimit_ && captureCount_ > captureLimit_) {
+		loop_->exit(0);
+		return;
+	}
+
 	/*
 	 * Defer processing of the completed request to the event loop, to avoid
 	 * blocking the camera manager thread.
@@ -206,12 +212,6 @@ void Capture::processRequest(Request *request)
 
 	std::cout << info.str() << std::endl;
 
-	captureCount_++;
-	if (captureLimit_ && captureCount_ >= captureLimit_) {
-		loop_->exit(0);
-		return;
-	}
-
 	request->reuse(Request::ReuseBuffers);
 	camera_->queueRequest(request);
 }
