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. */ | |
20 | eventfd(bool use_semaphore_semantics = true, std::uint64_t initial_value = 0); | |
21 | eventfd(const eventfd&) = delete; | |
22 | eventfd& operator=(const eventfd&) = delete; | |
23 | eventfd(eventfd&&) = delete; | |
24 | void operator=(eventfd&&) = delete; | |
25 | ||
26 | /* Throws on error. */ | |
27 | void increment(std::uint64_t value = 1); | |
28 | /* | |
29 | * Note that decrement() will block if the underlying value of the eventfd is 0 when | |
30 | * semaphore semantics are used, see EVENTFD(2). | |
31 | * | |
32 | * decrement() returns the new value of the underlying counter of the eventfd. | |
33 | * | |
34 | * Throws on error. | |
35 | */ | |
36 | std::uint64_t decrement(); | |
37 | }; | |
38 | ||
39 | } /* namespace lttng */ | |
40 | ||
41 | #endif /* LTTNG_EVENTFD_HPP */ |