From 8ef350a22bb49b65f3c858d2925c51f6139d859e Mon Sep 17 00:00:00 2001 From: Shawn Kuang Date: Thu, 16 Jul 2020 22:14:14 -0700 Subject: [PATCH] Fix racy callback test ThreadedCallbackValue1Ordered test was designed racy because RemoveCallback() can be called before the callback to-be-removed is added. Change the test so that the to-be-removed callback is added before removal. --- app/tests/callback_test.cc | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/app/tests/callback_test.cc b/app/tests/callback_test.cc index f1175f966e..aa7607522d 100644 --- a/app/tests/callback_test.cc +++ b/app/tests/callback_test.cc @@ -338,21 +338,19 @@ TEST_F(CallbackTest, ThreadedCallbackValue1Ordered) { &running); Thread addCallbacksThread( [](void* arg) -> void { - void** callback_entry_to_remove_ptr = static_cast(arg); callback::AddCallback( new callback::CallbackValue1(1, OrderedCallbackValue1)); callback::AddCallback( new callback::CallbackValue1(2, OrderedCallbackValue1)); - // Adds a callback which removes the entry referenced by - // callback_entry_to_remove. - callback::AddCallback(new callback::CallbackValue1( - callback_entry_to_remove_ptr, [](void** callback_entry) -> void { - callback::RemoveCallback(*callback_entry); + // Adds a callback which removes a newly added callback. + callback::AddCallback(new callback::CallbackVoid( + []() -> void { + void* callback_entry = callback::AddCallback( + new callback::CallbackValue1(4, OrderedCallbackValue1)); + callback::AddCallback( + new callback::CallbackValue1(5, OrderedCallbackValue1)); + callback::RemoveCallback(callback_entry); })); - *callback_entry_to_remove_ptr = callback::AddCallback( - new callback::CallbackValue1(4, OrderedCallbackValue1)); - callback::AddCallback( - new callback::CallbackValue1(5, OrderedCallbackValue1)); }, &callback_entry_to_remove); addCallbacksThread.Join();