X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=libust%2Ftracectl.c;h=a52b208f34b369a6887a59f5ce95da94d48a85d4;hb=99b72dc0657875cee4a10bf4c855e99a1b1d1f9c;hp=61a5392174fac31377117ae42ab77f188c22c651;hpb=f293009f641db927f1983505d46f93a2509160fc;p=lttng-ust.git diff --git a/libust/tracectl.c b/libust/tracectl.c index 61a53921..a52b208f 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -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"); }