Add the lttng::eventfd class
[lttng-tools.git] / src / common / eventfd.hpp
diff --git a/src/common/eventfd.hpp b/src/common/eventfd.hpp
new file mode 100644 (file)
index 0000000..39d398c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2023 Jérémie Galarneau <jeremie.galarneau@efficios.com>
+ *
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ */
+
+#ifndef LTTNG_EVENTFD_HPP
+#define LTTNG_EVENTFD_HPP
+
+#include <common/file-descriptor.hpp>
+
+#include <cstdint>
+
+namespace lttng {
+
+class eventfd : public file_descriptor {
+public:
+       /* Throws a posix_error exception on failure to create the underlying resource. */
+       eventfd(bool use_semaphore_semantics = true, std::uint64_t initial_value = 0);
+       eventfd(const eventfd&) = delete;
+       eventfd& operator=(const eventfd&) = delete;
+       eventfd(eventfd&&) = delete;
+       void operator=(eventfd&&) = delete;
+
+       /* Throws on error. */
+       void increment(std::uint64_t value = 1);
+       /*
+        * Note that decrement() will block if the underlying value of the eventfd is 0 when
+        * semaphore semantics are used, see EVENTFD(2).
+        *
+        * decrement() returns the new value of the underlying counter of the eventfd.
+        *
+        * Throws on error.
+        */
+       std::uint64_t decrement();
+};
+
+} /* namespace lttng */
+
+#endif /* LTTNG_EVENTFD_HPP */
This page took 0.023511 seconds and 4 git commands to generate.