X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=8b1665a06568de2bc90a4a90e61b40e35af4800c;hp=96f8eb0b3ead316c0defa96905ff40cfcccb3136;hb=fb54cdbf2a8ff53e9dc11403a8aca643bbdde9c0;hpb=0f83395d5e0e927fdab025eae023e68e9021af26 diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 96f8eb0b3..8b1665a06 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -1506,8 +1507,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); @@ -1572,7 +1581,7 @@ int ust_app_list_events(struct lttng_event **events) } while ((ret = ustctl_tracepoint_list_get(app->sock, handle, - &uiter)) != -ENOENT) { + &uiter)) != -LTTNG_UST_ERR_NOENT) { health_code_update(&health_thread_cmd); if (count >= nbmem) { /* In case the realloc fails, we free the memory */ @@ -1650,7 +1659,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) } while ((ret = ustctl_tracepoint_field_list_get(app->sock, handle, - &uiter)) != -ENOENT) { + &uiter)) != -LTTNG_UST_ERR_NOENT) { health_code_update(&health_thread_cmd); if (count >= nbmem) { /* In case the realloc fails, we free the memory */ @@ -1975,6 +1984,7 @@ int ust_app_disable_all_event_glb(struct ltt_ust_session *usess, int ust_app_create_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan) { + int ret = 0; struct lttng_ht_iter iter; struct ust_app *app; struct ust_app_session *ua_sess; @@ -2006,9 +2016,11 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess, ua_sess = create_ust_app_session(usess, app); if (ua_sess == NULL) { /* The malloc() failed. */ + ret = -1; goto error; } else if (ua_sess == (void *) -1UL) { /* The application's socket is not valid. Contiuing */ + ret = -1; continue; } @@ -2016,16 +2028,15 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess, ua_chan = create_ust_app_channel(ua_sess, uchan, app); if (ua_chan == NULL) { /* Major problem here and it's maybe the tracer or malloc() */ + ret = -1; goto error; } } rcu_read_unlock(); - return 0; - error: - return -1; + return ret; } /* @@ -2555,7 +2566,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; }