From: David Goulet Date: Fri, 28 Jun 2013 19:30:25 +0000 (-0400) Subject: Fix: put subbuffer back in kernel snapshot error path X-Git-Tag: v2.3.0-rc1~84 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=29decac336fd0d72ae00105b7e3d0cdece2ccd25;p=lttng-tools.git Fix: put subbuffer back in kernel snapshot error path Signed-off-by: David Goulet --- diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c index a0818452f..a68438253 100644 --- a/src/common/kernel-consumer/kernel-consumer.c +++ b/src/common/kernel-consumer/kernel-consumer.c @@ -204,6 +204,10 @@ int lttng_kconsumer_snapshot_channel(uint64_t key, char *path, */ pthread_mutex_lock(&stream->lock); + /* + * Assign the received relayd ID so we can use it for streaming. The streams + * are not visible to anyone so this is OK to change it. + */ stream->net_seq_idx = relayd_id; channel->relayd_id = relayd_id; if (relayd_id != (uint64_t) -1ULL) { @@ -282,22 +286,21 @@ int lttng_kconsumer_snapshot_channel(uint64_t key, char *path, ret = kernctl_get_subbuf_size(stream->wait_fd, &len); if (ret < 0) { ERR("Snapshot kernctl_get_subbuf_size"); - goto end_unlock; + goto error_put_subbuf; } ret = kernctl_get_padded_subbuf_size(stream->wait_fd, &padded_len); if (ret < 0) { ERR("Snapshot kernctl_get_padded_subbuf_size"); - goto end_unlock; + goto error_put_subbuf; } read_len = lttng_consumer_on_read_subbuffer_mmap(ctx, stream, len, padded_len - len); /* - * We write the padded len in local tracefiles but the - * data len when using a relay. - * Display the error but continue processing to try to - * release the subbuffer. + * We write the padded len in local tracefiles but the data len + * when using a relay. Display the error but continue processing + * to try to release the subbuffer. */ if (relayd_id != (uint64_t) -1ULL) { if (read_len != len) { @@ -337,6 +340,11 @@ int lttng_kconsumer_snapshot_channel(uint64_t key, char *path, ret = 0; goto end; +error_put_subbuf: + ret = kernctl_put_subbuf(stream->wait_fd); + if (ret < 0) { + ERR("Snapshot kernctl_put_subbuf error path"); + } end_unlock: pthread_mutex_unlock(&stream->lock); end: