aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/iomgr/lockfree_event.h
diff options
context:
space:
mode:
authorGravatar Yash Tibrewal <yashkt@google.com>2017-11-09 17:56:58 -0800
committerGravatar Yash Tibrewal <yashkt@google.com>2017-11-09 17:56:58 -0800
commitb1ee138ce691c6994e1a9b20f215521bd0087e6c (patch)
treed67670b97a4f18ebf9336cb04ca742d72e3ee60d /src/core/lib/iomgr/lockfree_event.h
parent4e9265c828f0b559b5fdba04913fed46bf771399 (diff)
parent76190cf14babab747d77f4fe0fca1af2ba7e7b8b (diff)
Merge master
Diffstat (limited to 'src/core/lib/iomgr/lockfree_event.h')
-rw-r--r--src/core/lib/iomgr/lockfree_event.h42
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 */