X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=libust%2Ftracectl.c;h=a52b208f34b369a6887a59f5ce95da94d48a85d4;hb=99b72dc0657875cee4a10bf4c855e99a1b1d1f9c;hp=412cca2b1cfdb1b4969cbaeb030f170ae871b988;hpb=a327294108470b94873a0c248fc02811db98fd64;p=ust.git diff --git a/libust/tracectl.c b/libust/tracectl.c index 412cca2..a52b208 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -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"); }