Commit | Line | Data |
---|---|---|
20c734f5 JG |
1 | /* |
2 | * Copyright (C) 2023 Jérémie Galarneau <jeremie.galarneau@efficios.com> | |
3 | * | |
4 | * SPDX-License-Identifier: LGPL-2.1-only | |
5 | * | |
6 | */ | |
7 | ||
8 | #ifndef LTTNG_EVENTFD_HPP | |
9 | #define LTTNG_EVENTFD_HPP | |
10 | ||
11 | #include <common/file-descriptor.hpp> | |
12 | ||
13 | #include <cstdint> | |
14 | ||
15 | namespace lttng { | |
16 | ||
17 | class eventfd : public file_descriptor { | |
18 | public: | |
19 | /* Throws a posix_error exception on failure to create the underlying resource. */ | |
b4853cf4 | 20 | explicit eventfd(bool use_semaphore_semantics = true, std::uint64_t initial_value = 0); |
20c734f5 JG |
21 | eventfd(const eventfd&) = delete; |
22 | eventfd& operator=(const eventfd&) = delete; | |
23 | eventfd(eventfd&&) = delete; | |
24 | void operator=(eventfd&&) = delete; | |
b4853cf4 | 25 | ~eventfd() = default; |
20c734f5 JG |
26 | |
27 | /* Throws on error. */ | |
28 | void increment(std::uint64_t value = 1); | |
29 | /* | |
30 | * Note that decrement() will block if the underlying value of the eventfd is 0 when | |
31 | * semaphore semantics are used, see EVENTFD(2). | |
32 | * | |
33 | * decrement() returns the new value of the underlying counter of the eventfd. | |
34 | * | |
35 | * Throws on error. | |
36 | */ | |
37 | std::uint64_t decrement(); | |
38 | }; | |
39 | ||
40 | } /* namespace lttng */ | |
41 | ||
42 | #endif /* LTTNG_EVENTFD_HPP */ |