Index: base/waitable_event_watcher_unittest.cc |
diff --git a/base/waitable_event_watcher_unittest.cc b/base/waitable_event_watcher_unittest.cc |
index 44b9b89ca7c39b88394398b3ded6c6a85bd21ff3..049de38802319a0915fd7a03b133fcbdde20b87f 100644 |
--- a/base/waitable_event_watcher_unittest.cc |
+++ b/base/waitable_event_watcher_unittest.cc |
@@ -107,6 +107,22 @@ void RunTest_OutlivesMessageLoop(MessageLoop::Type message_loop_type) { |
} |
} |
+void RunTest_DeleteUnder(MessageLoop::Type message_loop_type) { |
+ // Delete the WaitableEvent out from under the Watcher. This is explictly |
+ // allowed by the interface. |
+ |
+ MessageLoop message_loop(message_loop_type); |
+ |
+ { |
+ WaitableEventWatcher watcher; |
+ |
+ WaitableEvent* event = new WaitableEvent(false, false); |
+ QuitDelegate delegate; |
+ watcher.StartWatching(event, &delegate); |
+ delete event; |
+ } |
+} |
+ |
} // namespace |
//----------------------------------------------------------------------------- |
@@ -134,3 +150,9 @@ TEST(WaitableEventWatcherTest, OutlivesMessageLoop) { |
RunTest_OutlivesMessageLoop(MessageLoop::TYPE_IO); |
RunTest_OutlivesMessageLoop(MessageLoop::TYPE_UI); |
} |
+ |
+TEST(WaitableEventWatcherTest, DeleteUnder) { |
+ RunTest_DeleteUnder(MessageLoop::TYPE_DEFAULT); |
+ RunTest_DeleteUnder(MessageLoop::TYPE_IO); |
+ RunTest_DeleteUnder(MessageLoop::TYPE_UI); |
+} |