From 76be16fb6e4867e5f8c6b3a9729239a621210733 Mon Sep 17 00:00:00 2001 From: xiexun Date: Sat, 20 Sep 2025 00:12:16 +0800 Subject: [PATCH] Add device_connected_ check after acquiring lock in startDevice --- orbbec_camera/src/ob_camera_node_driver.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/orbbec_camera/src/ob_camera_node_driver.cpp b/orbbec_camera/src/ob_camera_node_driver.cpp index 08706338..b1d99647 100644 --- a/orbbec_camera/src/ob_camera_node_driver.cpp +++ b/orbbec_camera/src/ob_camera_node_driver.cpp @@ -32,6 +32,12 @@ std::string g_camera_name = "orbbec_camera"; // Assuming this is declared elsewhere void signalHandler(int sig) { + if (sig == SIGINT) { + std::cout << "Received SIGINT (Ctrl+C), shutting down ROS2..." << std::endl; + rclcpp::shutdown(); + // Do not call exit here, let ROS2 clean up + return; + } std::cout << "Received signal: " << sig << std::endl; std::string log_dir = "Log/"; @@ -105,6 +111,7 @@ OBCameraNodeDriver::~OBCameraNodeDriver() { } void OBCameraNodeDriver::init() { + signal(SIGINT, signalHandler); // Ctrl+C signal(SIGSEGV, signalHandler); // segment fault signal(SIGABRT, signalHandler); // abort signal(SIGFPE, signalHandler); // float point exception @@ -495,6 +502,12 @@ void OBCameraNodeDriver::startDevice(const std::shared_ptr &list std::shared_ptr lock_holder(nullptr, [this](int *) { pthread_mutex_unlock(orb_device_lock_); }); + + //check device connected flag again after get lock + if (device_connected_) { + return; + } + bool start_device_failed = false; try { auto start_time = std::chrono::high_resolution_clock::now();