diff options
author | 2017-10-21 16:06:18 -0700 | |
---|---|---|
committer | 2017-10-21 16:06:18 -0700 | |
commit | 04f404922dc2a98472d4299b973e7a81e7f19886 (patch) | |
tree | 9b1416f62300a1f791b19a1c9a41a1f098cefb49 /src/core/lib/iomgr/lockfree_event.h | |
parent | 313f36fd06c38384bfa89e9ee5f699c97ccc56d3 (diff) |
Class-ify lockfree event
Diffstat (limited to 'src/core/lib/iomgr/lockfree_event.h')
-rw-r--r-- | src/core/lib/iomgr/lockfree_event.h | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/src/core/lib/iomgr/lockfree_event.h b/src/core/lib/iomgr/lockfree_event.h index 925f004945..d843c340a1 100644 --- a/src/core/lib/iomgr/lockfree_event.h +++ b/src/core/lib/iomgr/lockfree_event.h @@ -25,24 +25,29 @@ #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(grpc_exec_ctx *exec_ctx, gpr_atm *state, - grpc_closure *closure, const char *variable); -/* Returns true on first successful shutdown */ -bool grpc_lfev_set_shutdown(grpc_exec_ctx *exec_ctx, gpr_atm *state, - grpc_error *shutdown_err); -void grpc_lfev_set_ready(grpc_exec_ctx *exec_ctx, gpr_atm *state, - const char *variable); - -#ifdef __cplusplus -} -#endif - -#endif /* GRPC_CORE_LIB_IOMGR_LOCKFREE_EVENT_H */
\ No newline at end of file +namespace grpc_core { + +class LockfreeEvent { + public: + ~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_exec_ctx *exec_ctx, grpc_closure *closure); + bool SetShutdown(grpc_exec_ctx *exec_ctx, grpc_error *error); + void SetReady(grpc_exec_ctx *exec_ctx); + + private: + enum State { kClosureNotReady = 0, kClosureReady = 2, kShutdownBit = 1 }; + + gpr_atm state_ = kClosureNotReady; +}; + +} // namespace grpc_core + +#endif /* GRPC_CORE_LIB_IOMGR_LOCKFREE_EVENT_H */ |