From 5b98a7741b64765b34396a151b976f8f58ee3a5e Mon Sep 17 00:00:00 2001 From: David Goulet Date: Tue, 30 Oct 2012 15:11:18 -0400 Subject: [PATCH] Fix: Bad return error code handling Two things here. First, if the tracer dies before we have time to create the session on it, the returned value (-1) was not handled creating a segfault on the following loop. Second, we no longer assert on the application PID hash table delete return value since we use add_replace on app. registration creating a possible key reuse for a different node. Signed-off-by: David Goulet --- src/bin/lttng-sessiond/ust-app.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 96f8eb0b3..e0562ed4e 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -1506,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); @@ -2555,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; } -- 2.34.1