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 <perkj@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24639}
diff --git a/rtc_base/task_queue_unittest.cc b/rtc_base/task_queue_unittest.cc
index cdf0d59..21b91c4 100644
--- a/rtc_base/task_queue_unittest.cc
+++ b/rtc_base/task_queue_unittest.cc
@@ -371,6 +371,32 @@
   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),