X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fagent-thread.c;h=9ac975cbf1ea9539c4d81db352089b25d12af561;hb=d558f2363a2daf3e456a28a6089f7464837ed542;hp=d7d9c6c349412ba659c3d3720e950b18ac3b8389;hpb=6c1c0768320135c6936c371b09731851b508c023;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/agent-thread.c b/src/bin/lttng-sessiond/agent-thread.c index d7d9c6c34..9ac975cbf 100644 --- a/src/bin/lttng-sessiond/agent-thread.c +++ b/src/bin/lttng-sessiond/agent-thread.c @@ -90,13 +90,13 @@ static void destroy_agent_app(int sock) rcu_read_lock(); app = agent_find_app_by_sock(sock); assert(app); - rcu_read_unlock(); - /* RCU read side lock is taken in this function call. */ + /* RCU read side lock is assumed to be held by this function. */ agent_delete_app(app); /* The application is freed in a RCU call but the socket is closed here. */ agent_destroy_app(app); + rcu_read_unlock(); } /* @@ -307,12 +307,13 @@ void *agent_thread_manage_registration(void *data) } while (1) { - DBG3("[agent-thread] Manage agent polling on %d fds", - LTTNG_POLL_GETNB(&events)); + DBG3("[agent-thread] Manage agent polling"); /* Inifinite blocking call, waiting for transmission */ restart: ret = lttng_poll_wait(&events, -1); + DBG3("[agent-thread] Manage agent return from poll on %d fds", + LTTNG_POLL_GETNB(&events)); if (ret < 0) { /* * Restart interrupted system call. @@ -330,6 +331,11 @@ restart: revents = LTTNG_POLL_GETEV(&events, i); pollfd = LTTNG_POLL_GETFD(&events, i); + if (!revents) { + /* No activity for this FD (poll implementation). */ + continue; + } + /* Thread quit pipe has been closed. Killing thread. */ ret = sessiond_check_thread_quit_pipe(pollfd, revents); if (ret) {