make forking while tracing work correctly
[ust.git] / libust / tracectl.c
index 61a5392174fac31377117ae42ab77f188c22c651..a52b208f34b369a6887a59f5ce95da94d48a85d4 100644 (file)
@@ -1085,15 +1085,15 @@ int restarting_usleep(useconds_t usecs)
 static void __attribute__((destructor)) keepalive()
 {
        if(trace_recording() && buffers_to_export) {
+               int total = 0;
                DBG("Keeping process alive for consumer daemon...");
                while(buffers_to_export) {
                        const int interv = 200000;
-                       int total = 0;
-                       restarting_usleep(20000);
+                       restarting_usleep(interv);
                        total += interv;
 
                        if(total >= 3000000) {
-                               WARN("non-consumed buffers remaining after limit; not waiting anymore");
+                               WARN("non-consumed buffers remaining after wait limit; not waiting anymore");
                                break;
                        }
                }
@@ -1109,14 +1109,35 @@ static void __attribute__((destructor)) keepalive()
 
 void ust_fork(void)
 {
+       struct blocked_consumer *bc;
+       struct blocked_consumer *deletable_bc = NULL;
+       int result;
+
        DBG("ust: forking");
        ltt_trace_stop("auto");
        ltt_trace_destroy("auto");
-       ltt_trace_alloc("auto");
-       ltt_trace_start("auto");
-       init_socket();
+       /* Delete all active connections */
+       ustcomm_close_all_connections(&ustcomm_app.server);
+
+       /* Delete all blocked consumers */
+       list_for_each_entry(bc, &blocked_consumers, list) {
+               free(deletable_bc);
+               deletable_bc = bc;
+               list_del(&bc->list);
+       }
+
        have_listener = 0;
        create_listener();
+       init_socket();
+       ltt_trace_setup("auto");
+       result = ltt_trace_set_type("auto", "ustrelay");
+       if(result < 0) {
+               ERR("ltt_trace_set_type failed");
+               return (void *)1;
+       }
+
+       ltt_trace_alloc("auto");
+       ltt_trace_start("auto");
        inform_consumer_daemon("auto");
 }
 
This page took 0.023362 seconds and 4 git commands to generate.