[PATCH] blktrace: fix get_subbuf() leak
[blktrace.git] / blktrace.c
index c8ec9ab03a649650a5b74b4643672e1fcc9127c5..9acb0dcc562c213ca5ad5f8572812b1d34466b85 100644 (file)
@@ -599,7 +599,12 @@ static int get_subbuf(struct thread_information *tip, unsigned int maxlen)
                ts->len = ret;
                tip->data_read += ret;
                if (subbuf_fifo_queue(tip, ts))
-                       return -1;
+                       ret = -1;
+       }
+
+       if (ret <= 0) {
+               free(ts->buf);
+               free(ts);
        }
 
        return ret;
@@ -785,7 +790,7 @@ static int get_subbuf_sendfile(struct thread_information *tip,
        struct stat sb;
        unsigned int ready;
 
-       wait_for_data(tip, 250);
+       wait_for_data(tip, -1);
 
        if (fstat(tip->fd, &sb) < 0) {
                perror("trace stat");
@@ -1550,13 +1555,14 @@ static void net_add_connection(int listen_fd, struct sockaddr_in *addr)
                memset(ch, 0, sizeof(*ch));
                ch->cl_in_addr = addr->sin_addr;
                net_add_client_host(ch);
+
+               printf("server: connection from %s\n", inet_ntoa(addr->sin_addr));
        }
 
        ch->net_connections = realloc(ch->net_connections, (ch->nconn + 1) * sizeof(*nc));
        nc = &ch->net_connections[ch->nconn++];
        memset(nc, 0, sizeof(*nc));
 
-       printf("server: connection from %s\n", inet_ntoa(addr->sin_addr));
        time(&nc->connect_time);
        nc->ch = ch;
        nc->in_fd = in_fd;