Fix relayd: session leaked on communication error during creation
[lttng-tools.git] / src / bin / lttng-relayd / main.c
index 1e2e9050fef2d6d77ca78e9767a2fea759ba99be..e81bdeffc82b97790ddf99bf6bb473636b0f4064 100644 (file)
@@ -85,7 +85,7 @@ NULL
 
 enum relay_connection_status {
        RELAY_CONNECTION_STATUS_OK,
-       /* An error occured while processing an event on the connection. */
+       /* An error occurred while processing an event on the connection. */
        RELAY_CONNECTION_STATUS_ERROR,
        /* Connection closed/shutdown cleanly. */
        RELAY_CONNECTION_STATUS_CLOSED,
@@ -1099,7 +1099,7 @@ static int relay_create_session(const struct lttcomm_relayd_hdr *recv_hdr,
 {
        int ret = 0;
        ssize_t send_ret;
-       struct relay_session *session;
+       struct relay_session *session = NULL;
        struct lttcomm_relayd_status_session reply;
        char session_name[LTTNG_NAME_MAX];
        char hostname[LTTNG_HOST_NAME_MAX];
@@ -1153,7 +1153,9 @@ send_reply:
                                send_ret);
                ret = -1;
        }
-
+       if (ret < 0 && session) {
+               session_put(session);
+       }
        return ret;
 }
 
@@ -1640,7 +1642,7 @@ int rotate_truncate_stream(struct relay_stream *stream)
 
        /*
         * Rewind the current tracefile to the position at which the rotation
-        * should have occured.
+        * should have occurred.
         */
        lseek_ret = lseek(stream->stream_fd->fd,
                        stream->pos_after_last_complete_data_index, SEEK_SET);
@@ -2973,7 +2975,7 @@ int relay_rotate_pending(const struct lttcomm_relayd_hdr *recv_hdr,
                        rotate_pending = true;
                        DBG("Stream %" PRIu64 " is still rotating",
                                        stream->stream_handle);
-               } else if (stream->current_chunk_id.value < chunk_id) {
+               } else if (stream->current_chunk_id.value <= chunk_id) {
                        /*
                         * Stream closed on the consumer but still active on the
                         * relay.
This page took 0.024823 seconds and 4 git commands to generate.