X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt-sessiond%2Ftraceable-app.c;h=41dc51111dd3de0d12f9a58dde3d5aa07a5e4df4;hb=558e70e9829c97ecd228516f6e312768be0536d7;hp=85d50393a6b9eaaa60eeb17bb963370656d9708a;hpb=f8f0c3d1337c4eda5fb76a323ffe6c21c926a21e;p=lttng-tools.git diff --git a/ltt-sessiond/traceable-app.c b/ltt-sessiond/traceable-app.c index 85d50393a..41dc51111 100644 --- a/ltt-sessiond/traceable-app.c +++ b/ltt-sessiond/traceable-app.c @@ -49,11 +49,17 @@ static void add_traceable_app(struct ltt_traceable_app *lta) */ static void del_traceable_app(struct ltt_traceable_app *lta) { + struct ltt_ust_channel *chan; + cds_list_del(<a->list); /* Sanity check */ if (ltt_traceable_app_list.count > 0) { ltt_traceable_app_list.count--; } + + cds_list_for_each_entry(chan, <a->channels.head, list) { + trace_ust_destroy_channel(chan); + } } /* @@ -98,6 +104,27 @@ static struct ltt_traceable_app *find_app_by_sock(int sock) return NULL; } +/* + * Iterate over the traceable apps list and return a pointer or NULL if not + * found. + */ +struct ltt_traceable_app *traceable_app_get_by_pid(pid_t pid) +{ + struct ltt_traceable_app *iter; + + cds_list_for_each_entry(iter, <t_traceable_app_list.head, list) { + if (iter->pid == pid) { + /* Found */ + DBG2("Found traceable app by pid %d", pid); + return iter; + } + } + + DBG2("Traceable app with pid %d not found", pid); + + return NULL; +} + /* * Using pid and uid (of the app), allocate a new ltt_traceable_app struct and * add it to the global traceable app list. @@ -123,6 +150,7 @@ int register_traceable_app(struct ust_register_msg *msg, int sock) lta->sock = sock; strncpy(lta->name, msg->name, sizeof(lta->name)); lta->name[16] = '\0'; + CDS_INIT_LIST_HEAD(<a->channels.head); lock_apps_list(); add_traceable_app(lta); @@ -149,9 +177,8 @@ void unregister_traceable_app(int sock) lta = find_app_by_sock(sock); if (lta) { DBG("PID %d unregistered with sock %d", lta->pid, sock); - close(lta->sock); del_traceable_app(lta); - unlock_apps_list(); + close(lta->sock); free(lta); } unlock_apps_list(); @@ -183,6 +210,7 @@ void clean_traceable_apps_list(void) * cleanup() functions meaning that the program will exit. */ cds_list_for_each_entry_safe(iter, tmp, <t_traceable_app_list.head, list) { + del_traceable_app(iter); close(iter->sock); free(iter); }