diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index bdf14b31d8eeba9c..b3860952efa6446f 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -495,6 +495,11 @@ int Camera::acquire()
 	if (!stateIs(CameraAvailable))
 		return -EBUSY;
 
+	if (!pipe_->lock()) {
+		LOG(Camera, Info) << "Camera in use by other process";
+		return -EBUSY;
+	}
+
 	state_ = CameraAcquired;
 
 	return 0;
@@ -516,6 +521,8 @@ int Camera::release()
 	if (!stateBetween(CameraAvailable, CameraConfigured))
 		return -EBUSY;
 
+	pipe_->unlock();
+
 	state_ = CameraAvailable;
 
 	return 0;
