diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index f821d8fe1b6c..0bab3bedd402 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -1520,8 +1520,14 @@ void RPiCameraData::clearIncompleteRequests()
 
 		for (auto &b : request->buffers()) {
 			FrameBuffer *buffer = b.second;
-			buffer->cancel();
-			pipe_->completeBuffer(request, buffer);
+			/*
+			 * Has the buffer already been handed back to the
+			 * request? If not, do so now.
+			 */
+			if (buffer->request()) {
+				buffer->cancel();
+				pipe_->completeBuffer(request, buffer);
+			}
 		}
 
 		pipe_->completeRequest(request);
