diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h
index 302fe3d3e86b..f6673e2f6eda 100644
--- a/include/libcamera/buffer.h
+++ b/include/libcamera/buffer.h
@@ -28,7 +28,7 @@ struct FrameMetadata {
 		unsigned int bytesused;
 	};
 
-	Status status;
+	Status status = FrameCancelled;
 	unsigned int sequence;
 	uint64_t timestamp;
 	std::vector<Plane> planes;
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 0071667e4a2c..9ea6ed09446b 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -118,8 +118,12 @@ void Request::reuse(ReuseFlag flags)
 	pending_.clear();
 	if (flags & ReuseBuffers) {
 		for (auto pair : bufferMap_) {
-			pair.second->request_ = this;
-			pending_.insert(pair.second);
+			FrameBuffer *buffer = pair.second;
+
+			buffer->metadata_.status = FrameMetadata::Status::FrameCancelled;
+			buffer->request_ = this;
+
+			pending_.insert(buffer);
 		}
 	} else {
 		bufferMap_.clear();
@@ -188,6 +192,7 @@ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer)
 	}
 
 	buffer->request_ = this;
+	buffer->metadata_.status = FrameMetadata::Status::FrameCancelled;
 	pending_.insert(buffer);
 	bufferMap_[stream] = buffer;
 
