assert(reg_stream);
assert(stream);
- /* Reserve the amount of file descriptor we need. */
+ /* Duplicating a stream requires 2 new fds. Reserve them. */
ret = lttng_fd_get(LTTNG_FD_APPS, 2);
if (ret < 0) {
ERR("Exhausted number of available FD upon duplicate stream");
assert(buf_reg_chan);
assert(ua_chan);
- /* Need two fds for the channel. */
+ /* Duplicating a channel requires 1 new fd. Reserve it. */
ret = lttng_fd_get(LTTNG_FD_APPS, 1);
if (ret < 0) {
ERR("Exhausted number of available FD upon duplicate channel");
ret = find_or_create_ust_app_session(usess, app, &ua_sess, NULL);
if (ret < 0) {
/* Tracer is probably gone or ENOMEM. */
- goto error;
+ if (ua_sess) {
+ destroy_app_session(app, ua_sess);
+ }
+ goto end;
}
assert(ua_sess);
pthread_mutex_lock(&ua_sess->lock);
if (ua_sess->deleted) {
- goto end;
+ goto deleted_session;
}
rcu_read_lock();
*/
ret = create_ust_app_metadata(ua_sess, app, usess->consumer);
if (ret < 0) {
- goto error_unlock;
+ ERR("Metadata creation failed for app sock %d for session id %" PRIu64,
+ app->sock, usess->id);
}
rcu_read_unlock();
-end:
+deleted_session:
pthread_mutex_unlock(&ua_sess->lock);
- /* Everything went well at this point. */
- return;
-
-error_unlock:
- rcu_read_unlock();
- pthread_mutex_unlock(&ua_sess->lock);
-error:
- if (ua_sess) {
- destroy_app_session(app, ua_sess);
- }
+end:
return;
}