diff --git a/tools/replay/camera.cc b/tools/replay/camera.cc index b6d4ddc3a2..ded966da6d 100644 --- a/tools/replay/camera.cc +++ b/tools/replay/camera.cc @@ -27,6 +27,13 @@ CameraServer::CameraServer(std::pair camera_size[MAX_CAMERAS]) { CameraServer::~CameraServer() { for (auto &cam : cameras_) { if (cam.thread.joinable()) { + // Clear the queue + std::pair item; + while (cam.queue.try_pop(item)) { + --publishing_; + } + + // Signal termination and join the thread cam.queue.push({}); cam.thread.join(); } diff --git a/tools/replay/replay.cc b/tools/replay/replay.cc index c5ad2aa548..15daecf01f 100644 --- a/tools/replay/replay.cc +++ b/tools/replay/replay.cc @@ -50,20 +50,20 @@ Replay::~Replay() { } void Replay::stop() { - if (!stream_thread_ && segments_.empty()) return; - - rInfo("shutdown: in progress..."); + exit_ = true; if (stream_thread_ != nullptr) { - exit_ = true; + rInfo("shutdown: in progress..."); pauseStreamThread(); stream_cv_.notify_one(); stream_thread_->quit(); stream_thread_->wait(); stream_thread_->deleteLater(); stream_thread_ = nullptr; + rInfo("shutdown: done"); } timeline_future.waitForFinished(); - rInfo("shutdown: done"); + camera_server_.reset(nullptr); + segments_.clear(); } bool Replay::load() {