diff --git a/backend/src/plugins/camera/camera_service_impl.h b/backend/src/plugins/camera/camera_service_impl.h index f358b1726f..f234608662 100644 --- a/backend/src/plugins/camera/camera_service_impl.h +++ b/backend/src/plugins/camera/camera_service_impl.h @@ -454,17 +454,19 @@ class CameraServiceImpl final : public rpc::camera::CameraService::Service { const rpc::camera::SubscribeCameraStatusRequest * /* request */, grpc::ServerWriter *writer) override { + std::promise stream_closed_promise; auto stream_closed_future = stream_closed_promise.get_future(); bool is_finished = false; - _camera.subscribe_status([&writer, &stream_closed_promise, &is_finished]( + _camera.subscribe_status([this, &writer, &stream_closed_promise, &is_finished]( const dronecode_sdk::Camera::Status camera_status) { rpc::camera::CameraStatusResponse rpc_camera_status_response; auto rpc_camera_status = translateCameraStatus(camera_status); rpc_camera_status_response.set_allocated_camera_status(rpc_camera_status.release()); + std::lock_guard lock(_subscribe_camera_status_mutex); if (!writer->Write(rpc_camera_status_response) && !is_finished) { is_finished = true; stream_closed_promise.set_value(); @@ -704,6 +706,7 @@ class CameraServiceImpl final : public rpc::camera::CameraService::Service { private: Camera &_camera; + mutable std::mutex _subscribe_camera_status_mutex{}; }; } // namespace backend