From 09b93f19bcb4c694113819f730d838079506e94d Mon Sep 17 00:00:00 2001 From: Chienyuan Date: Fri, 17 May 2019 10:57:46 +0800 Subject: [PATCH] QueueTest: UnregisterDequeue before promise set value For some tests, ~Queue will() be trigger right after we get promise we should UnregisterDequeue before promise set value to prevent race condition Test: atest bluetooth_test_gd Change-Id: I9409b6829cce61ef95c766a1d3b3679197b8f9f4 --- gd/common/bidi_queue_unittest.cc | 2 +- gd/os/linux_generic/queue_unittest.cc | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gd/common/bidi_queue_unittest.cc b/gd/common/bidi_queue_unittest.cc index 18642e8ba..0bad92def 100644 --- a/gd/common/bidi_queue_unittest.cc +++ b/gd/common/bidi_queue_unittest.cc @@ -83,8 +83,8 @@ class TestBidiQueueEnd { std::promise* promise = new std::promise(); handler_->Post([this, promise] { end_->RegisterDequeue(handler_, [this, promise] { - promise->set_value(end_->TryDequeue().get()); end_->UnregisterDequeue(); + promise->set_value(end_->TryDequeue().get()); }); }); diff --git a/gd/os/linux_generic/queue_unittest.cc b/gd/os/linux_generic/queue_unittest.cc index a4dc6d75e..8dbb161d3 100644 --- a/gd/os/linux_generic/queue_unittest.cc +++ b/gd/os/linux_generic/queue_unittest.cc @@ -159,16 +159,16 @@ class TestDequeueEnd { buffer_.push(std::move(data)); LOG_INFO("push %s, size %d", copy.c_str(), (int)buffer_.size()); // Debug log, will be removed + if (buffer_.size() == capacity_) { + queue_->UnregisterDequeue(); + } + auto pair = promise_map_->find(buffer_.size()); if (pair != promise_map_->end()) { LOG_INFO("promises : %d", pair->first); // Debug log, will be removed pair->second.set_value(pair->first); promise_map_->erase(pair->first); } - - if (buffer_.size() == capacity_) { - queue_->UnregisterDequeue(); - } } void setDelay(int value) { -- 2.11.0