Index: mojo/edk/system/waitable_event.h |
diff --git a/mojo/edk/system/waitable_event.h b/mojo/edk/system/waitable_event.h |
deleted file mode 100644 |
index 38c75e06564db3c1c1b44d236188be3b95c0172e..0000000000000000000000000000000000000000 |
--- a/mojo/edk/system/waitable_event.h |
+++ /dev/null |
@@ -1,127 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Provides classes with functionality analogous to (but much more limited than) |
-// Chromium's |base::WaitableEvent|, which in turn provides functionality |
-// analogous to Windows's Event. (Unlike these two, we have separate types for |
-// the manual- and auto-reset versions.) |
- |
-#ifndef MOJO_EDK_SYSTEM_WAITABLE_EVENT_H_ |
-#define MOJO_EDK_SYSTEM_WAITABLE_EVENT_H_ |
- |
-#include "mojo/edk/util/cond_var.h" |
-#include "mojo/edk/util/mutex.h" |
-#include "mojo/edk/util/thread_annotations.h" |
-#include "mojo/public/cpp/system/macros.h" |
- |
-namespace mojo { |
-namespace system { |
- |
-// AutoResetWaitableEvent ------------------------------------------------------ |
- |
-// An event that can be signaled and waited on. This version automatically |
-// returns to the unsignaled state after unblocking one waiter. (This is similar |
-// to Windows's auto-reset Event, which is also imitated by Chromium's |
-// auto-reset |base::WaitableEvent|. However, there are some limitations -- see |
-// |Signal()|.) This class is thread-safe. |
-class AutoResetWaitableEvent { |
- public: |
- AutoResetWaitableEvent() {} |
- ~AutoResetWaitableEvent() {} |
- |
- // Put the event in the signaled state. Exactly one |Wait()| will be unblocked |
- // and the event will be returned to the unsignaled state. |
- // |
- // Notes (these are arguably bugs, but not worth working around): |
- // * That |Wait()| may be one that occurs on the calling thread, *after* the |
- // call to |Signal()|. |
- // * A |Signal()|, followed by a |Reset()|, may cause *no* waiting thread to |
- // be unblocked. |
- // * We rely on pthreads's queueing for picking which waiting thread to |
- // unblock, rather than enforcing FIFO ordering. |
- void Signal(); |
- |
- // Put the event into the unsignaled state. Generally, this is not recommended |
- // on an auto-reset event (see notes above). |
- void Reset(); |
- |
- // Blocks the calling thread until the event is signaled. Upon unblocking, the |
- // event is returned to the unsignaled state, so that (unless |Reset()| is |
- // called) each |Signal()| unblocks exactly one |Wait()|. |
- void Wait(); |
- |
- // Like |Wait()|, but with a timeout. Also unblocks if |timeout_microseconds| |
- // without being signaled in which case it returns true (otherwise, it returns |
- // false). |
- bool WaitWithTimeout(uint64_t timeout_microseconds); |
- |
- // Returns whether this event is in a signaled state or not. For use in tests |
- // only (in general, this is racy). Note: Unlike |
- // |base::WaitableEvent::IsSignaled()|, this doesn't reset the signaled state. |
- bool IsSignaledForTest(); |
- |
- private: |
- util::CondVar cv_; |
- util::Mutex mutex_; |
- |
- // True if this event is in the signaled state. |
- bool signaled_ MOJO_GUARDED_BY(mutex_) = false; |
- |
- MOJO_DISALLOW_COPY_AND_ASSIGN(AutoResetWaitableEvent); |
-}; |
- |
-// ManualResetWaitableEvent ---------------------------------------------------- |
- |
-// An event that can be signaled and waited on. This version remains signaled |
-// until explicitly reset. (This is similar to Windows's manual-reset Event, |
-// which is also imitated by Chromium's manual-reset |base::WaitableEvent|.) |
-// This class is thread-safe. |
-class ManualResetWaitableEvent { |
- public: |
- ManualResetWaitableEvent() {} |
- ~ManualResetWaitableEvent() {} |
- |
- // Put the event into the unsignaled state. |
- void Reset(); |
- |
- // Put the event in the signaled state. If this is a manual-reset event, it |
- // wakes all waiting threads (blocked on |Wait()| or |WaitWithTimeout()|). |
- // Otherwise, it wakes a single waiting thread (and returns to the unsignaled |
- // state), if any; if there are none, it remains signaled. |
- void Signal(); |
- |
- // Blocks the calling thread until the event is signaled. |
- void Wait(); |
- |
- // Like |Wait()|, but with a timeout. Also unblocks if |timeout_microseconds| |
- // without being signaled in which case it returns true (otherwise, it returns |
- // false). |
- bool WaitWithTimeout(uint64_t timeout_microseconds); |
- |
- // Returns whether this event is in a signaled state or not. For use in tests |
- // only (in general, this is racy). |
- bool IsSignaledForTest(); |
- |
- private: |
- util::CondVar cv_; |
- util::Mutex mutex_; |
- |
- // True if this event is in the signaled state. |
- bool signaled_ MOJO_GUARDED_BY(mutex_) = false; |
- |
- // While |CondVar::SignalAll()| (|pthread_cond_broadcast()|) will wake all |
- // waiting threads, one has to deal with spurious wake-ups. Checking |
- // |signaled_| isn't sufficient, since another thread may have been awoken and |
- // (manually) reset |signaled_|. This is a counter that is incremented in |
- // |Signal()| before calling |CondVar::SignalAll()|. A waiting thread knows it |
- // was awoken if |signal_id_| is different from when it started waiting. |
- unsigned signal_id_ MOJO_GUARDED_BY(mutex_) = 0u; |
- |
- MOJO_DISALLOW_COPY_AND_ASSIGN(ManualResetWaitableEvent); |
-}; |
- |
-} // namespace system |
-} // namespace mojo |
- |
-#endif // MOJO_EDK_SYSTEM_WAITABLE_EVENT_H_ |