lib,bugfix: fix blocking queue unit test. Dtor cannot destroy object while a thread is still pushing data

This commit is contained in:
Francisco 2021-06-01 19:45:28 +01:00 committed by Andre Puschmann
parent 60f294a6a1
commit 539ca47fe2
1 changed files with 12 additions and 17 deletions

View File

@ -207,7 +207,7 @@ void test_dyn_circular_buffer()
TESTASSERT(C::count == 0);
}
int test_queue_block_api()
void test_queue_block_api()
{
dyn_blocking_queue<int> queue(100);
@ -229,31 +229,26 @@ int test_queue_block_api()
queue.stop();
t.join();
return SRSRAN_SUCCESS;
}
int test_queue_block_api_2()
void test_queue_block_api_2()
{
std::thread t;
{
dyn_blocking_queue<int> queue(100);
dyn_blocking_queue<int> queue(100);
t = std::thread([&queue]() {
int count = 0;
while (queue.push_blocking(count++)) {
}
});
for (int i = 0; i < 10000; ++i) {
TESTASSERT(queue.pop_blocking() == i);
t = std::thread([&queue]() {
int count = 0;
while (queue.push_blocking(count++)) {
}
});
// queue dtor called
for (int i = 0; i < 10000; ++i) {
TESTASSERT(queue.pop_blocking() == i);
}
queue.stop();
t.join();
return SRSRAN_SUCCESS;
}
} // namespace srsran
@ -267,8 +262,8 @@ int main(int argc, char** argv)
TESTASSERT(srsran::test_static_circular_buffer() == SRSRAN_SUCCESS);
srsran::test_dyn_circular_buffer();
TESTASSERT(srsran::test_queue_block_api() == SRSRAN_SUCCESS);
TESTASSERT(srsran::test_queue_block_api_2() == SRSRAN_SUCCESS);
srsran::test_queue_block_api();
srsran::test_queue_block_api_2();
srsran::console("Success\n");
return SRSRAN_SUCCESS;
}