X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fjul-thread.c;h=cc694df81066718a82ded69fc2baf36b683b726b;hp=b4a71d79849d36d739020faa6733e1916cfaca76;hb=5368d366c6c7f80ad941172a6bc9c6a5174cbdf0;hpb=5b06ad8b15efa6566f9da15e2b28e681729a603a diff --git a/src/bin/lttng-sessiond/jul-thread.c b/src/bin/lttng-sessiond/jul-thread.c index b4a71d798..cc694df81 100644 --- a/src/bin/lttng-sessiond/jul-thread.c +++ b/src/bin/lttng-sessiond/jul-thread.c @@ -34,7 +34,8 @@ * can let the user define a custom one. However, localhost is ALWAYS the * default listening address. */ -static const char *default_reg_uri = "tcp://localhost"; +static const char *default_reg_uri = + "tcp://" DEFAULT_NETWORK_VIEWER_BIND_ADDRESS; /* * Update JUL application using the given socket. This is done just after @@ -141,8 +142,8 @@ static struct lttcomm_sock *init_tcp_socket(void) ret = sock->ops->bind(sock); if (ret < 0) { - WARN("An other session daemon is using this JUL port. JUL support " - "will be deactivated not interfering with the tracing."); + WARN("Another session daemon is using this JUL port. JUL support " + "will be deactivated to prevent interfering with the tracing."); goto error; } @@ -180,12 +181,13 @@ static void destroy_tcp_socket(struct lttcomm_sock *sock) /* * Handle a new JUL registration using the reg socket. After that, a new JUL * application is added to the global hash table and attach to an UST app - * object. + * object. If r_app is not NULL, the created app is set to the pointer. * * Return the new FD created upon accept() on success or else a negative errno * value. */ -static int handle_registration(struct lttcomm_sock *reg_sock) +static int handle_registration(struct lttcomm_sock *reg_sock, + struct jul_app **r_app) { int ret; pid_t pid; @@ -230,6 +232,10 @@ static int handle_registration(struct lttcomm_sock *reg_sock) * app and app before JUL. */ + if (r_app) { + *r_app = app; + } + return new_sock->fd; error_socket: @@ -319,16 +325,19 @@ restart: destroy_jul_app(pollfd); } else if (revents & (LPOLLIN)) { int new_fd; + struct jul_app *app = NULL; /* Pollin event of JUL app socket should NEVER happen. */ assert(pollfd == reg_sock->fd); - new_fd = handle_registration(reg_sock); + new_fd = handle_registration(reg_sock, &app); if (new_fd < 0) { WARN("[jul-thread] JUL registration failed. Ignoring."); /* Somehow the communication failed. Just continue. */ continue; } + /* Should not have a NULL app on success. */ + assert(app); /* Only add poll error event to only detect shutdown. */ ret = lttng_poll_add(&events, new_fd, @@ -340,6 +349,9 @@ restart: /* Update newly registered app. */ update_jul_app(new_fd); + + /* On failure, the poll will detect it and clean it up. */ + (void) jul_send_registration_done(app); } else { ERR("Unknown poll events %u for sock %d", revents, pollfd); continue;