diff options
author | 2017-11-09 17:56:58 -0800 | |
---|---|---|
committer | 2017-11-09 17:56:58 -0800 | |
commit | b1ee138ce691c6994e1a9b20f215521bd0087e6c (patch) | |
tree | d67670b97a4f18ebf9336cb04ca742d72e3ee60d /src/core/lib/iomgr/lockfree_event.h | |
parent | 4e9265c828f0b559b5fdba04913fed46bf771399 (diff) | |
parent | 76190cf14babab747d77f4fe0fca1af2ba7e7b8b (diff) |
Merge master
Diffstat (limited to 'src/core/lib/iomgr/lockfree_event.h')
-rw-r--r-- | src/core/lib/iomgr/lockfree_event.h | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/src/core/lib/iomgr/lockfree_event.h b/src/core/lib/iomgr/lockfree_event.h index 08a1ae40a6..70fa1ac89d 100644 --- a/src/core/lib/iomgr/lockfree_event.h +++ b/src/core/lib/iomgr/lockfree_event.h @@ -25,22 +25,30 @@ #include "src/core/lib/iomgr/exec_ctx.h" -#ifdef __cplusplus -extern "C" { -#endif - -void grpc_lfev_init(gpr_atm* state); -void grpc_lfev_destroy(gpr_atm* state); -bool grpc_lfev_is_shutdown(gpr_atm* state); - -void grpc_lfev_notify_on(gpr_atm* state, grpc_closure* closure, - const char* variable); -/* Returns true on first successful shutdown */ -bool grpc_lfev_set_shutdown(gpr_atm* state, grpc_error* shutdown_err); -void grpc_lfev_set_ready(gpr_atm* state, const char* variable); - -#ifdef __cplusplus -} -#endif +namespace grpc_core { + +class LockfreeEvent { + public: + LockfreeEvent(); + ~LockfreeEvent(); + + LockfreeEvent(const LockfreeEvent&) = delete; + LockfreeEvent& operator=(const LockfreeEvent&) = delete; + + bool IsShutdown() const { + return (gpr_atm_no_barrier_load(&state_) & kShutdownBit) != 0; + } + + void NotifyOn(grpc_closure* closure); + bool SetShutdown(grpc_error* error); + void SetReady(); + + private: + enum State { kClosureNotReady = 0, kClosureReady = 2, kShutdownBit = 1 }; + + gpr_atm state_; +}; + +} // namespace grpc_core #endif /* GRPC_CORE_LIB_IOMGR_LOCKFREE_EVENT_H */ |