projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: relayd: live: metadata stream reference count < 0 assert
[lttng-tools.git]
/
src
/
bin
/
lttng-relayd
/
live.cpp
diff --git
a/src/bin/lttng-relayd/live.cpp
b/src/bin/lttng-relayd/live.cpp
index 92c3bf4a7831d8ac6195009e08af8dc5e6fceee0..c169be918f0b87891b8bc61785ff6610aa952f1a 100644
(file)
--- a/
src/bin/lttng-relayd/live.cpp
+++ b/
src/bin/lttng-relayd/live.cpp
@@
-1661,9
+1661,9
@@
int viewer_get_next_index(struct relay_connection *conn)
* This allows clients to consume all the packets of a trace chunk
* after a session's destruction.
*/
* This allows clients to consume all the packets of a trace chunk
* after a session's destruction.
*/
- if (
conn->viewer_session->current_trace_chunk != vstream->stream_file.trace_chunk
&&
+ if (
!lttng_trace_chunk_ids_equal(conn->viewer_session->current_trace_chunk, vstream->stream_file.trace_chunk)
&&
!(rstream->completed_rotation_count == vstream->last_seen_rotation_count + 1 && !rstream->trace_chunk)) {
!(rstream->completed_rotation_count == vstream->last_seen_rotation_count + 1 && !rstream->trace_chunk)) {
- DBG("Viewer session and viewer stream chunk differ: "
+ DBG("Viewer session and viewer stream chunk
IDs
differ: "
"vsession chunk %p vstream chunk %p",
conn->viewer_session->current_trace_chunk,
vstream->stream_file.trace_chunk);
"vsession chunk %p vstream chunk %p",
conn->viewer_session->current_trace_chunk,
vstream->stream_file.trace_chunk);
@@
-2006,11
+2006,11
@@
int viewer_get_metadata(struct relay_connection *conn)
* an error.
*/
if (vstream->metadata_sent > 0) {
* an error.
*/
if (vstream->metadata_sent > 0) {
- vstream->stream->no_new_metadata_notified = true;
- if (vstream->stream->closed) {
+ if (vstream->stream->closed && vstream->stream->no_new_metadata_notified) {
/* Release ownership for the viewer metadata stream. */
viewer_stream_put(vstream);
}
/* Release ownership for the viewer metadata stream. */
viewer_stream_put(vstream);
}
+ vstream->stream->no_new_metadata_notified = true;
}
goto send_reply;
}
}
goto send_reply;
}
@@
-2032,8
+2032,8
@@
int viewer_get_metadata(struct relay_connection *conn)
}
if (conn->viewer_session->current_trace_chunk &&
}
if (conn->viewer_session->current_trace_chunk &&
- conn->viewer_session->current_trace_chunk !=
- vstream->stream_file.trace_chunk) {
+ !lttng_trace_chunk_ids_equal(conn->viewer_session->current_trace_chunk,
+ vstream->stream_file.trace_chunk)
)
{
bool acquired_reference;
DBG("Viewer session and viewer stream chunk differ: "
bool acquired_reference;
DBG("Viewer session and viewer stream chunk differ: "
This page took
0.024782 seconds
and
4
git commands to generate.