Fix flaky test register_enqueue_with_half_empty_queue
The TestQueue was deleted while still running a task.
This is because Handler.cc is not looking for running task when being
deleted
Fix: 264602833
Test: atest bluetooth_test_gd_unit64
Change-Id: I2131c14226cc2b086e8d1c6eeacaf1f9d6876da2
(cherry picked from commit 60ca3cfd07780f08fde26630de729e25a601a5c9)
Merged-In: I2131c14226cc2b086e8d1c6eeacaf1f9d6876da2
diff --git a/system/gd/os/linux_generic/queue_unittest.cc b/system/gd/os/linux_generic/queue_unittest.cc
index 7994aba..706fcd2 100644
--- a/system/gd/os/linux_generic/queue_unittest.cc
+++ b/system/gd/os/linux_generic/queue_unittest.cc
@@ -19,6 +19,7 @@
#include <sys/eventfd.h>
#include <atomic>
+#include <chrono>
#include <future>
#include <unordered_map>
@@ -26,6 +27,8 @@
#include "gtest/gtest.h"
#include "os/reactor.h"
+using namespace std::chrono_literals;
+
namespace bluetooth {
namespace os {
namespace {
@@ -60,6 +63,11 @@
Handler* enqueue_handler_;
Thread* dequeue_thread_;
Handler* dequeue_handler_;
+
+ void sync_enqueue_handler() {
+ ASSERT(enqueue_thread_ != nullptr);
+ ASSERT(enqueue_thread_->GetReactor()->WaitForIdle(2s));
+ }
};
class TestEnqueueEnd {
@@ -338,6 +346,7 @@
test_enqueue_end.RegisterEnqueue(&enqueue_promise_map);
enqueue_future.wait();
EXPECT_EQ(enqueue_future.get(), 0);
+ sync_enqueue_handler();
}
// Enqueue end level : 1