From 2903888cdef80d5b1a4ce26b30379121a9f17f7b Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Fri, 7 Sep 2018 16:28:20 +0200 Subject: [PATCH] Verify posting task and reply just before task queue destruction Bug: webrtc:9728 Change-Id: I516311a507b4e9f49c45fda5185e96d4248ed455 Reviewed-on: https://webrtc-review.googlesource.com/98520 Reviewed-by: Per Kjellander Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#24639} --- rtc_base/task_queue_unittest.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/rtc_base/task_queue_unittest.cc b/rtc_base/task_queue_unittest.cc index cdf0d59b04..21b91c45b0 100644 --- a/rtc_base/task_queue_unittest.cc +++ b/rtc_base/task_queue_unittest.cc @@ -371,6 +371,32 @@ TEST(TaskQueueTest, PostAndReplyDeadlock) { EXPECT_TRUE(event.Wait(1000)); } +// http://bugs.webrtc.org/9728 +#if defined(WEBRTC_WIN) +#define MAYBE_DeleteTaskQueueAfterPostAndReply \ + DISABLED_DeleteTaskQueueAfterPostAndReply +#else +#define MAYBE_DeleteTaskQueueAfterPostAndReply DeleteTaskQueueAfterPostAndReply +#endif +TEST(TaskQueueTest, MAYBE_DeleteTaskQueueAfterPostAndReply) { + Event task_deleted(false, false); + Event reply_deleted(false, false); + auto* task_queue = new TaskQueue("Queue"); + + task_queue->PostTaskAndReply( + /*task=*/rtc::NewClosure( + /*closure=*/[] {}, + /*cleanup=*/[&task_deleted] { task_deleted.Set(); }), + /*reply=*/rtc::NewClosure( + /*closure=*/[] {}, + /*cleanup=*/[&reply_deleted] { reply_deleted.Set(); })); + + delete task_queue; + + EXPECT_TRUE(task_deleted.Wait(1000)); + EXPECT_TRUE(reply_deleted.Wait(1000)); +} + void TestPostTaskAndReply(TaskQueue* work_queue, Event* event) { ASSERT_FALSE(work_queue->IsCurrent()); work_queue->PostTaskAndReply(Bind(&CheckCurrent, nullptr, work_queue),