| Index: mojo/edk/system/awakable_list_unittest.cc
|
| diff --git a/mojo/edk/system/awakable_list_unittest.cc b/mojo/edk/system/awakable_list_unittest.cc
|
| index 9772e7af438efb4fdf27790611b193d6f894a4c1..45e390c885713428ed57a919e6883e822deefe9a 100644
|
| --- a/mojo/edk/system/awakable_list_unittest.cc
|
| +++ b/mojo/edk/system/awakable_list_unittest.cc
|
| @@ -285,6 +285,44 @@ TEST(AwakableListTest, MultipleAwakables) {
|
| EXPECT_EQ(10u, context4);
|
| }
|
|
|
| +TEST(AwakableListTest, RemoveWithContext) {
|
| + MojoResult result;
|
| + uint64_t context;
|
| +
|
| + {
|
| + AwakableList awakable_list;
|
| + test::SimpleWaiterThread thread(&result, &context);
|
| + awakable_list.Add(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 1);
|
| + awakable_list.Add(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 2);
|
| + thread.Start();
|
| + awakable_list.RemoveWithContext(thread.waiter(), 2);
|
| + awakable_list.AwakeForStateChange(HandleSignalsState(
|
| + MOJO_HANDLE_SIGNAL_READABLE,
|
| + MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE));
|
| + awakable_list.RemoveWithContext(thread.waiter(), 1);
|
| + // Double-remove okay:
|
| + awakable_list.RemoveWithContext(thread.waiter(), 1);
|
| + } // Join |thread|.
|
| + EXPECT_EQ(MOJO_RESULT_OK, result);
|
| + EXPECT_EQ(1u, context);
|
| +
|
| + // Try the same thing, but remove "1" before the awake instead.
|
| + {
|
| + AwakableList awakable_list;
|
| + test::SimpleWaiterThread thread(&result, &context);
|
| + awakable_list.Add(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 1);
|
| + awakable_list.Add(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 2);
|
| + thread.Start();
|
| + awakable_list.RemoveWithContext(thread.waiter(), 1);
|
| + awakable_list.AwakeForStateChange(HandleSignalsState(
|
| + MOJO_HANDLE_SIGNAL_READABLE,
|
| + MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE));
|
| + awakable_list.RemoveWithContext(thread.waiter(), 2);
|
| + } // Join |thread|.
|
| + EXPECT_EQ(MOJO_RESULT_OK, result);
|
| + EXPECT_EQ(2u, context);
|
| +}
|
| +
|
| class KeepAwakable : public Awakable {
|
| public:
|
| KeepAwakable() : awake_count(0) {}
|
|
|