projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: sessiond: snapshot errors don't clear session's trace chunk
[lttng-tools.git]
/
src
/
bin
/
lttng-sessiond
/
cmd.c
diff --git
a/src/bin/lttng-sessiond/cmd.c
b/src/bin/lttng-sessiond/cmd.c
index 7c9477df938787407dc5eaf8b0c569ddfa0557a5..93df59ccdc97d8fe26578866a96ff48229015110 100644
(file)
--- a/
src/bin/lttng-sessiond/cmd.c
+++ b/
src/bin/lttng-sessiond/cmd.c
@@
-1185,6
+1185,7
@@
int cmd_setup_relayd(struct ltt_session *session)
DBG("Setting relayd for session %s", session->name);
DBG("Setting relayd for session %s", session->name);
+ rcu_read_lock();
if (session->current_trace_chunk) {
enum lttng_trace_chunk_status status = lttng_trace_chunk_get_id(
session->current_trace_chunk, ¤t_chunk_id.value);
if (session->current_trace_chunk) {
enum lttng_trace_chunk_status status = lttng_trace_chunk_get_id(
session->current_trace_chunk, ¤t_chunk_id.value);
@@
-1198,8
+1199,6
@@
int cmd_setup_relayd(struct ltt_session *session)
}
}
}
}
- rcu_read_lock();
-
if (usess && usess->consumer && usess->consumer->type == CONSUMER_DST_NET
&& usess->consumer->enabled) {
/* For each consumer socket, send relayd sockets */
if (usess && usess->consumer && usess->consumer->type == CONSUMER_DST_NET
&& usess->consumer->enabled) {
/* For each consumer socket, send relayd sockets */
@@
-4541,7
+4540,7
@@
int64_t get_session_nb_packets_per_stream(const struct ltt_session *session,
}
cur_nb_packets++;
}
}
cur_nb_packets++;
}
- if (!cur_nb_packets) {
+ if (!cur_nb_packets
&& size_left != max_size
) {
/* Not enough room to grab one packet of each stream, error. */
return -1;
}
/* Not enough room to grab one packet of each stream, error. */
return -1;
}
@@
-4654,7
+4653,7
@@
enum lttng_error_code snapshot_record(struct ltt_session *session,
snapshot_output->max_size);
if (nb_packets_per_stream < 0) {
ret_code = LTTNG_ERR_MAX_SIZE_INVALID;
snapshot_output->max_size);
if (nb_packets_per_stream < 0) {
ret_code = LTTNG_ERR_MAX_SIZE_INVALID;
- goto error;
+ goto error
_close_trace_chunk
;
}
if (session->kernel_session) {
}
if (session->kernel_session) {
@@
-4662,7
+4661,7
@@
enum lttng_error_code snapshot_record(struct ltt_session *session,
snapshot_kernel_consumer_output, session,
wait, nb_packets_per_stream);
if (ret_code != LTTNG_OK) {
snapshot_kernel_consumer_output, session,
wait, nb_packets_per_stream);
if (ret_code != LTTNG_OK) {
- goto error;
+ goto error
_close_trace_chunk
;
}
}
}
}
@@
-4671,10
+4670,10
@@
enum lttng_error_code snapshot_record(struct ltt_session *session,
snapshot_ust_consumer_output, session,
wait, nb_packets_per_stream);
if (ret_code != LTTNG_OK) {
snapshot_ust_consumer_output, session,
wait, nb_packets_per_stream);
if (ret_code != LTTNG_OK) {
- goto error;
+ goto error
_close_trace_chunk
;
}
}
}
}
-
+error_close_trace_chunk:
if (session_close_trace_chunk(
session, session->current_trace_chunk, NULL, NULL)) {
/*
if (session_close_trace_chunk(
session, session->current_trace_chunk, NULL, NULL)) {
/*
@@
-4908,6
+4907,12
@@
int cmd_rotate_session(struct ltt_session *session,
goto end;
}
goto end;
}
+ /* Unsupported feature in lttng-modules before 2.8 (lack of sequence number). */
+ if (session->kernel_session && !kernel_supports_ring_buffer_packet_sequence_number()) {
+ cmd_ret = LTTNG_ERR_ROTATION_NOT_AVAILABLE_KERNEL;
+ goto end;
+ }
+
if (session->rotation_state == LTTNG_ROTATION_STATE_ONGOING) {
DBG("Refusing to launch a rotation; a rotation is already in progress for session %s",
session->name);
if (session->rotation_state == LTTNG_ROTATION_STATE_ONGOING) {
DBG("Refusing to launch a rotation; a rotation is already in progress for session %s",
session->name);
This page took
0.026711 seconds
and
4
git commands to generate.