summaryrefslogtreecommitdiff
path: root/test/util/async_task.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/util/async_task.cpp')
-rw-r--r--test/util/async_task.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/util/async_task.cpp b/test/util/async_task.cpp
index 9d36230472..5fd890ad9e 100644
--- a/test/util/async_task.cpp
+++ b/test/util/async_task.cpp
@@ -64,6 +64,33 @@ TEST(AsyncTask, DestroyShouldNotRunQueue) {
EXPECT_EQ(count, 0);
}
+TEST(AsyncTask, DestroyAfterSignaling) {
+ RunLoop loop;
+
+ // We're creating two tasks and signal both of them; the one that gets fired first destroys
+ // the other one. Make sure that the second one we destroyed doesn't fire.
+
+ std::unique_ptr<AsyncTask> task1, task2;
+
+ task1 = std::make_unique<AsyncTask>([&] {
+ task2.reset();
+ if (!task1) {
+ FAIL() << "Task was destroyed but invoked anyway";
+ }
+ });
+ task2 = std::make_unique<AsyncTask>([&] {
+ task1.reset();
+ if (!task2) {
+ FAIL() << "Task was destroyed but invoked anyway";
+ }
+ });
+
+ task1->send();
+ task2->send();
+
+ loop.runOnce();
+}
+
TEST(AsyncTask, RequestCoalescingMultithreaded) {
RunLoop loop;