X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=e0562ed4e5448d2e184b288481fad0e80bb77b0b;hb=9449cc7574c27419ac4424b4653a6f4428d01b4d;hp=6f73c6df34a4006353ab1796e35743c51b2dd2a2;hpb=659ed79f6b4a6ebbe7219a0fd4a347d24d62c545;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 6f73c6df3..e0562ed4e 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -976,9 +976,10 @@ static struct ust_app_session *create_ust_app_session( ret = ustctl_create_session(app->sock); if (ret < 0) { ERR("Creating session for app pid %d", app->pid); + delete_ust_app_session(-1, ua_sess); /* This means that the tracer is gone... */ ua_sess = (void*) -1UL; - goto error; + goto end; } ua_sess->handle = ret; @@ -993,11 +994,6 @@ static struct ust_app_session *create_ust_app_session( end: health_code_update(&health_thread_cmd); return ua_sess; - -error: - delete_ust_app_session(-1, ua_sess); - health_code_update(&health_thread_cmd); - return NULL; } /* @@ -1510,8 +1506,16 @@ void ust_app_unregister(int sock) /* Assign second node for deletion */ iter.iter.node = <a->pid_n.node; + /* + * Ignore return value since the node might have been removed before by an + * add replace during app registration because the PID can be reassigned by + * the OS. + */ ret = lttng_ht_del(ust_app_ht, &iter); - assert(!ret); + if (ret) { + DBG3("Unregister app by PID %d failed. This can happen on pid reuse", + lta->pid); + } /* Free memory */ call_rcu(<a->pid_n.head, delete_ust_app_rcu); @@ -2559,7 +2563,8 @@ void ust_app_global_update(struct ltt_ust_session *usess, int sock) } ua_sess = create_ust_app_session(usess, app); - if (ua_sess == NULL) { + if (ua_sess == NULL || ua_sess == (void *) -1UL) { + /* Tracer is gone for this session and has been freed */ goto error; }