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 | ||
28f23191 JG |
15 | #include "macros.hpp" |
16 | ||
17 | #include <stdbool.h> | |
287a512f JG |
18 | #include <stdint.h> |
19 | #include <urcu/wfstack.h> | |
287a512f JG |
20 | |
21 | struct lttng_waiter { | |
22 | struct cds_wfs_node wait_queue_node; | |
23 | int32_t state; | |
24 | }; | |
25 | ||
287a512f JG |
26 | void lttng_waiter_init(struct lttng_waiter *waiter); |
27 | ||
287a512f JG |
28 | void lttng_waiter_wait(struct lttng_waiter *waiter); |
29 | ||
30 | /* | |
31 | * lttng_waiter_wake_up must only be called by a single waker. | |
32 | * It is invalid for multiple "wake" operations to be invoked | |
33 | * on a single waiter without re-initializing it before. | |
34 | */ | |
287a512f JG |
35 | void lttng_waiter_wake_up(struct lttng_waiter *waiter); |
36 | ||
37 | #endif /* LTTNG_WAITER_H */ |