aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/iomgr/lockfree_event.h
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-10-21 16:06:18 -0700
committerGravatar Craig Tiller <ctiller@google.com>2017-10-21 16:06:18 -0700
commit04f404922dc2a98472d4299b973e7a81e7f19886 (patch)
tree9b1416f62300a1f791b19a1c9a41a1f098cefb49 /src/core/lib/iomgr/lockfree_event.h
parent313f36fd06c38384bfa89e9ee5f699c97ccc56d3 (diff)
Class-ify lockfree event
Diffstat (limited to 'src/core/lib/iomgr/lockfree_event.h')
-rw-r--r--src/core/lib/iomgr/lockfree_event.h47
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 */