Fix segfault in ust_fork
[ust.git] / libust / tracectl.c
index 25f84ccd0f033f2ec4ec38f40a589dae6cb05bc2..1bd722949aaca5c4335f53b16b270d30e68f238d 100644 (file)
@@ -100,11 +100,11 @@ static void print_markers(FILE *fp)
 
        while (iter.marker) {
                fprintf(fp, "marker: %s/%s %d \"%s\" %p\n",
-                       iter.marker->channel,
-                       iter.marker->name,
-                       (int)imv_read(iter.marker->state),
-                       iter.marker->format,
-                       iter.marker->location);
+                       (*iter.marker)->channel,
+                       (*iter.marker)->name,
+                       (int)imv_read((*iter.marker)->state),
+                       (*iter.marker)->format,
+                       (*iter.marker)->location);
                marker_iter_next(&iter);
        }
        unlock_markers();
@@ -119,7 +119,7 @@ static void print_trace_events(FILE *fp)
        trace_event_iter_start(&iter);
 
        while (iter.trace_event) {
-               fprintf(fp, "trace_event: %s\n", iter.trace_event->name);
+               fprintf(fp, "trace_event: %s\n", (*iter.trace_event)->name);
                trace_event_iter_next(&iter);
        }
        unlock_trace_events();
@@ -1314,8 +1314,8 @@ static void __attribute__((constructor)) init()
 
                DBG("now iterating on markers already registered");
                while (iter.marker) {
-                       DBG("now iterating on marker %s", iter.marker->name);
-                       auto_probe_connect(iter.marker);
+                       DBG("now iterating on marker %s", (*iter.marker)->name);
+                       auto_probe_connect(*iter.marker);
                        marker_iter_next(&iter);
                }
        }
@@ -1581,7 +1581,6 @@ static void ust_fork(void)
        ltt_unlock_traces();
 
        ltt_trace_stop("auto");
-       ltt_trace_destroy("auto", 1);
        /* Delete all active connections, but leave them in the epoll set */
        cds_list_for_each_entry_safe(sock, sock_tmp, &ust_socks, list) {
                ustcomm_del_sock(sock, 1);
@@ -1601,6 +1600,8 @@ static void ust_fork(void)
                cds_list_del(&buf->open_buffers_list);
        }
 
+       ltt_trace_destroy("auto", 1);
+
        /* Clean up the listener socket and epoll, keeping the scoket file */
        ustcomm_del_named_sock(listen_sock, 1);
        close(epoll_fd);
This page took 0.02331 seconds and 4 git commands to generate.