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;
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;
}
/*
/* 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);
}
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;
}