diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index ec4665a9..8331da11 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -143,7 +143,6 @@ private:
 	int initLinks(Camera *camera, const CameraSensor *sensor,
 		      const RkISP1CameraConfiguration &config);
 	int createCamera(MediaEntity *sensor);
-	void tryCompleteRequest(Request *request);
 	void bufferReady(FrameBuffer *buffer);
 	void paramReady(FrameBuffer *buffer);
 	void statReady(FrameBuffer *buffer);
@@ -276,8 +275,8 @@ void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &meta
 
 	request->metadata().merge(metadata);
 	pipe()->availableStatBuffers_.push(statBuffer);
-	pipe()->completeBuffer(request, statBuffer);
-	pipe()->tryCompleteRequest(request);
+	if (pipe()->completeBuffer(request, statBuffer))
+		pipe()->completeRequest(request);
 }
 
 /* -----------------------------------------------------------------------------
@@ -1104,14 +1103,6 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
  * Buffer Handling
  */
 
-void PipelineHandlerRkISP1::tryCompleteRequest(Request *request)
-{
-	if (request->hasPendingBuffers())
-		return;
-
-	completeRequest(request);
-}
-
 void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
 {
 	ASSERT(activeCamera_);
@@ -1137,8 +1128,8 @@ void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
 		}
 	}
 
-	completeBuffer(request, buffer);
-	tryCompleteRequest(request);
+	if (completeBuffer(request, buffer))
+		completeRequest(request);
 }
 
 void PipelineHandlerRkISP1::paramReady(FrameBuffer *buffer)
@@ -1146,8 +1137,9 @@ void PipelineHandlerRkISP1::paramReady(FrameBuffer *buffer)
 	ASSERT(activeCamera_);
 	Request *request = buffer->request();
 
-	completeBuffer(buffer->request(), buffer);
-	tryCompleteRequest(request);
+	if (completeBuffer(buffer->request(), buffer))
+		completeRequest(request);
+
 	availableParamBuffers_.push(buffer);
 }
 
@@ -1158,8 +1150,9 @@ void PipelineHandlerRkISP1::statReady(FrameBuffer *buffer)
 	Request *request = buffer->request();
 
 	if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
-		completeBuffer(request, buffer);
-		tryCompleteRequest(request);
+		if (completeBuffer(request, buffer))
+			completeRequest(request);
+
 		availableStatBuffers_.push(buffer);
 		return;
 	}
