X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fwaiter.hpp;h=8ea0c2d83f450ad7ff6da749f57e6e0424c68e13;hp=d88fe0f66af96a1029afe019e925fb6d2cb7d809;hb=f40b76aed659ff694cf948bf8ebd1d4b5741c986;hpb=a968a9e069d76bfb1ac416dc834994c6a82b085e diff --git a/src/common/waiter.hpp b/src/common/waiter.hpp index d88fe0f66..8ea0c2d83 100644 --- a/src/common/waiter.hpp +++ b/src/common/waiter.hpp @@ -23,15 +23,33 @@ struct lttng_waiter { int32_t state; }; +struct lttng_wait_queue { + struct cds_wfs_stack stack; +}; + void lttng_waiter_init(struct lttng_waiter *waiter); void lttng_waiter_wait(struct lttng_waiter *waiter); /* - * lttng_waiter_wake_up must only be called by a single waker. + * lttng_waiter_wake must only be called by a single waker. * It is invalid for multiple "wake" operations to be invoked * on a single waiter without re-initializing it before. */ -void lttng_waiter_wake_up(struct lttng_waiter *waiter); +void lttng_waiter_wake(struct lttng_waiter *waiter); + +void lttng_wait_queue_init(struct lttng_wait_queue *queue); + +/* + * Atomically add a waiter to a wait queue. + * A full memory barrier is issued before being added to the wait queue. + */ +void lttng_wait_queue_add(struct lttng_wait_queue *queue, struct lttng_waiter *waiter); + +/* + * Wake every waiter present in the wait queue and remove them from + * the queue. + */ +void lttng_wait_queue_wake_all(struct lttng_wait_queue *queue); #endif /* LTTNG_WAITER_H */