health_code_update();
- memset(&msg, 0, sizeof(msg));
+ memset(&reply, 0, sizeof(reply));
reply.major = RELAYD_VERSION_COMM_MAJOR;
reply.minor = RELAYD_VERSION_COMM_MINOR;
send_streams = 1;
response.status = htobe32(LTTNG_VIEWER_NEW_STREAMS_OK);
- if (!send_streams) {
- goto send_reply;
- }
-
ret = make_viewer_streams(session, LTTNG_VIEWER_SEEK_LAST, NULL, &nb_unsent,
&nb_created);
if (ret < 0) {
goto send_reply;
}
- if (!send_streams) {
- goto send_reply;
- }
-
ret = make_viewer_streams(session, seek_type, &nb_streams, NULL, NULL);
if (ret < 0) {
goto end_unlock;
rstream = stream_find_by_id(relay_streams_ht, vstream->stream_handle);
assert(rstream);
+ pthread_mutex_lock(&rstream->viewer_stream_rotation_lock);
if (!rstream->close_flag) {
if (vstream->abort_flag) {
/* Rotate on abort (overwrite). */
DBG("Viewer rotate because of overwrite");
ret = viewer_stream_rotate(vstream, rstream);
if (ret < 0) {
+ pthread_mutex_unlock(&rstream->viewer_stream_rotation_lock);
goto end_unlock;
} else if (ret == 1) {
viewer_index.status = htobe32(LTTNG_VIEWER_INDEX_HUP);
viewer_stream_delete(vstream);
viewer_stream_destroy(ctf_trace, vstream);
+ pthread_mutex_unlock(&rstream->viewer_stream_rotation_lock);
goto send_reply;
}
/* ret == 0 means successful so we continue. */
}
- pthread_mutex_lock(&rstream->viewer_stream_rotation_lock);
if (rstream->tracefile_count_current == vstream->tracefile_count_current) {
if (rstream->beacon_ts_end != -1ULL &&
vstream->last_sent_index == rstream->total_index_received) {
goto send_reply;
}
}
- pthread_mutex_unlock(&rstream->viewer_stream_rotation_lock);
} else if (rstream->close_flag && vstream->close_write_flag &&
vstream->total_index_received == vstream->last_sent_index) {
/* Last index sent and current tracefile closed in write */
viewer_index.status = htobe32(LTTNG_VIEWER_INDEX_HUP);
viewer_stream_delete(vstream);
viewer_stream_destroy(ctf_trace, vstream);
+ pthread_mutex_unlock(&rstream->viewer_stream_rotation_lock);
goto send_reply;
} else {
vstream->close_write_flag = 1;
}
+ pthread_mutex_unlock(&rstream->viewer_stream_rotation_lock);
if (!ctf_trace->metadata_received ||
ctf_trace->metadata_received > ctf_trace->metadata_sent) {
sizeof(packet_index));
pthread_mutex_unlock(&vstream->overwrite_lock);
if (ret < sizeof(packet_index)) {
+ unsigned int close_write_flag;
+
+ pthread_mutex_lock(&rstream->viewer_stream_rotation_lock);
+ close_write_flag = vstream->close_write_flag;
+ pthread_mutex_unlock(&rstream->viewer_stream_rotation_lock);
/*
* The tracefile is closed in write, so we read up to EOF.
*/
- if (vstream->close_write_flag == 1) {
+ if (close_write_flag == 1) {
viewer_index.status = htobe32(LTTNG_VIEWER_INDEX_RETRY);
/* Rotate on normal EOF */
ret = viewer_stream_rotate(vstream, rstream);
DBG("Viewer create session received");
resp.status = htobe32(LTTNG_VIEWER_CREATE_SESSION_OK);
- conn->viewer_session = zmalloc(sizeof(conn->viewer_session));
+ conn->viewer_session = zmalloc(sizeof(*conn->viewer_session));
if (!conn->viewer_session) {
ERR("Allocation viewer session");
resp.status = htobe32(LTTNG_VIEWER_CREATE_SESSION_ERR);