diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 4e111d6d2f55..616838fed702 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -241,6 +241,8 @@ void PipelineHandler::hotplugMediaDevice(MediaDevice *media)
  */
 void PipelineHandler::mediaDeviceDisconnected(MediaDevice *media)
 {
+	media->disconnected.disconnect(this);
+
 	if (cameras_.empty())
 		return;
 
