Commit | Line | Data |
---|---|---|
287a512f | 1 | /* |
ab5be9fa MJ |
2 | * Copyright (C) 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
3 | * Copyright (C) 2017 Jérémie Galarneau <jeremie.galarneau@efficios.com> | |
287a512f | 4 | * |
ab5be9fa | 5 | * SPDX-License-Identifier: LGPL-2.1-only |
287a512f JG |
6 | * |
7 | * This code is originally adapted from userspace-rcu's urcu-wait.h | |
8 | */ | |
9 | ||
10 | #ifndef LTTNG_WAITER_H | |
11 | #define LTTNG_WAITER_H | |
12 | ||
13 | #define _LGPL_SOURCE | |
14 | ||
15 | #include <stdint.h> | |
16 | #include <urcu/wfstack.h> | |
17 | #include <stdbool.h> | |
c9e313bc | 18 | #include "macros.hpp" |
287a512f JG |
19 | |
20 | struct lttng_waiter { | |
21 | struct cds_wfs_node wait_queue_node; | |
22 | int32_t state; | |
23 | }; | |
24 | ||
287a512f JG |
25 | void lttng_waiter_init(struct lttng_waiter *waiter); |
26 | ||
287a512f JG |
27 | void lttng_waiter_wait(struct lttng_waiter *waiter); |
28 | ||
29 | /* | |
30 | * lttng_waiter_wake_up must only be called by a single waker. | |
31 | * It is invalid for multiple "wake" operations to be invoked | |
32 | * on a single waiter without re-initializing it before. | |
33 | */ | |
287a512f JG |
34 | void lttng_waiter_wake_up(struct lttng_waiter *waiter); |
35 | ||
36 | #endif /* LTTNG_WAITER_H */ |