diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp
index 1a75f35aa..cbba08c82 100644
--- a/src/libcamera/pipeline/virtual/virtual.cpp
+++ b/src/libcamera/pipeline/virtual/virtual.cpp
@@ -322,7 +322,7 @@ int PipelineHandlerVirtual::queueRequestDevice([[maybe_unused]] Camera *camera,
 
 				if (streamConfig.frameGenerator->generateFrame(
 					    stream->configuration().size, buffer))
-					buffer->_d()->cancel();
+					fmd.status = FrameMetadata::Status::FrameError;
 
 				completeBuffer(request, buffer);
 				break;
