+2024-08-22 lttng-tools 2.12.16 (National Take Your Cat to the Vet Day)
+ * Fix: Do not null out lttng_consumer_stream channel on deletion
+ * Fix: Crash when unregistering UST apps during shutdown
+ * lttng-ctl: Hide symbol introduced by fix
+ * Fix: consumerd: wrong timer mentioned in error logging
+ * Fix: consumerd: type confusion in lttng_consumer_send_error
+
2024-03-28 lttng-tools 2.12.15 (Respect Your Cat Day)
* Fix: baddr-statedump: use $(LIBTOOL) --mode=execute
* Fix: relayd: live client not notified of inactive streams
dnl SPDX-License-Identifier: GPL-2.0-only
AC_PREREQ([2.64])
-AC_INIT([lttng-tools],[2.12.15],[jeremie.galarneau@efficios.com],[],[https://lttng.org])
+AC_INIT([lttng-tools],[2.12.16],[jeremie.galarneau@efficios.com],[],[https://lttng.org])
AC_CONFIG_HEADERS([include/config.h])
AC_CONFIG_AUX_DIR([config])
int ret;
assert(channel);
+ assert(!channel->is_deleted);
channel->metadata_cache = zmalloc(
sizeof(struct consumer_metadata_cache));
struct lttng_consumer_stream *metadata_stream;
assert(channel);
+ assert(!channel->is_deleted);
assert(channel->metadata_cache);
/*
channel = si->si_value.sival_ptr;
assert(channel);
+ assert(!channel->is_deleted);
if (channel->switch_timer_error) {
return;
channel = si->si_value.sival_ptr;
assert(channel);
+ assert(!channel->is_deleted);
if (channel->switch_timer_error) {
goto error;
struct itimerspec its;
assert(channel);
+ assert(!channel->is_deleted);
assert(channel->key);
if (timer_interval_us == 0) {
int ret;
assert(channel);
+ assert(!channel->is_deleted);
assert(channel->key);
ret = consumer_channel_timer_start(&channel->switch_timer, channel,
int ret;
assert(channel);
+ assert(!channel->is_deleted);
assert(channel->key);
assert(!channel->monitor_timer_enabled);
ret = consumer_channel_timer_stop(&channel->monitor_timer,
LTTNG_CONSUMER_SIG_MONITOR);
if (ret == -1) {
- ERR("Failed to stop live timer");
+ ERR("Failed to stop monitor timer");
goto end;
}
/* Go for channel deletion! */
free_channel = true;
}
- stream->chan = NULL;
/*
* Nullify the stream reference so it is not used after deletion. The
#endif /* HAVE_FLOCK */
+LTTNG_HIDDEN
int utils_create_lock_file(const char *filepath)
{
int ret, fd;
#ifndef COMMON_LOCKFILE_H
#define COMMON_LOCKFILE_H
+#include <common/macros.h>
+
/*
* Create lock file to the given path and filename.
* Returns the associated file descriptor, -1 on error.
* forks+execve as the child process closes a file descriptor referencing
* the file description of 'filepath'.
*/
+LTTNG_HIDDEN
int utils_create_lock_file(const char *filepath);
#endif /* COMMON_LOCKFILE_H */
int ret = 0;
assert(channel);
+ assert(!channel->is_deleted);
assert(ctx);
if (ctx->on_recv_channel != NULL) {
struct lttng_consumer_stream *stream = NULL;
assert(channel);
+ assert(!channel->is_deleted);
assert(ctx);
stream = consumer_stream_create(
pthread_mutex_t *current_stream_lock = NULL;
assert(channel);
+ assert(!channel->is_deleted);
assert(ctx);
/*
struct ustctl_consumer_channel *ust_channel;
assert(channel);
+ assert(!channel->is_deleted);
assert(attr);
assert(ust_chanp);
assert(channel->buffer_credentials.is_set);
uint64_t net_seq_idx = -1ULL;
assert(channel);
+ assert(!channel->is_deleted);
assert(ctx);
assert(sock >= 0);
assert(ctx);
assert(channel);
+ assert(!channel->is_deleted);
assert(attr);
/*
struct lttng_consumer_stream *stream, *stmp;
assert(channel);
+ assert(!channel->is_deleted);
assert(ctx);
/* Send streams to the corresponding thread. */
health_code_update();
pthread_mutex_lock(&stream->chan->lock);
+ pthread_mutex_lock(&stream->lock);
lttng_ustconsumer_close_metadata(stream->chan);
+ pthread_mutex_unlock(&stream->lock);
pthread_mutex_unlock(&stream->chan->lock);
}
int ret;
assert(channel);
+ assert(!channel->is_deleted);
assert(channel->metadata_cache);
memset(&request, 0, sizeof(request));