X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconsumer%2Fconsumer-timer.hpp;fp=src%2Fcommon%2Fconsumer%2Fconsumer-timer.hpp;h=3445ed57fd1fd2399824912e36ee135a88c26695;hb=c9e313bc594f40a86eed237dce222c0fc99c957f;hp=0000000000000000000000000000000000000000;hpb=4878de5c7deb512bbdac4fdfc498907efa06fb7c;p=lttng-tools.git diff --git a/src/common/consumer/consumer-timer.hpp b/src/common/consumer/consumer-timer.hpp new file mode 100644 index 000000000..3445ed57f --- /dev/null +++ b/src/common/consumer/consumer-timer.hpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2011 EfficiOS Inc. + * Copyright (C) 2011 Mathieu Desnoyers + * Copyright (C) 2012 David Goulet + * + * SPDX-License-Identifier: GPL-2.0-only + * + */ + +#ifndef CONSUMER_TIMER_H +#define CONSUMER_TIMER_H + +#include + +#include "consumer.hpp" + +#define LTTNG_CONSUMER_SIG_SWITCH SIGRTMIN + 10 +#define LTTNG_CONSUMER_SIG_TEARDOWN SIGRTMIN + 11 +#define LTTNG_CONSUMER_SIG_LIVE SIGRTMIN + 12 +#define LTTNG_CONSUMER_SIG_MONITOR SIGRTMIN + 13 +#define LTTNG_CONSUMER_SIG_EXIT SIGRTMIN + 14 + +#define CLOCKID CLOCK_MONOTONIC + +/* + * Handle timer teardown race wrt memory free of private data by consumer + * signals are handled by a single thread, which permits a synchronization + * point between handling of each signal. Internal lock ensures mutual + * exclusion. + */ +struct timer_signal_data { + pthread_t tid; /* thread id managing signals */ + int setup_done; + int qs_done; + pthread_mutex_t lock; +}; + +void consumer_timer_switch_start(struct lttng_consumer_channel *channel, + unsigned int switch_timer_interval_us); +void consumer_timer_switch_stop(struct lttng_consumer_channel *channel); +void consumer_timer_live_start(struct lttng_consumer_channel *channel, + unsigned int live_timer_interval_us); +void consumer_timer_live_stop(struct lttng_consumer_channel *channel); +int consumer_timer_monitor_start(struct lttng_consumer_channel *channel, + unsigned int monitor_timer_interval_us); +int consumer_timer_monitor_stop(struct lttng_consumer_channel *channel); +void *consumer_timer_thread(void *data); +int consumer_signal_init(void); + +int consumer_flush_kernel_index(struct lttng_consumer_stream *stream); +int consumer_flush_ust_index(struct lttng_consumer_stream *stream); + +int consumer_timer_thread_get_channel_monitor_pipe(void); +int consumer_timer_thread_set_channel_monitor_pipe(int fd); + +#endif /* CONSUMER_TIMER_H */