X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Fmain.c;h=d61cd7bc512f3c7dbb682950e55ff448db0507f4;hp=85ac06be9e32c2967417513b7902d2b226b303ba;hb=856117389ea3a46acbefdc4a27b9f4f8b1cf5179;hpb=0fdd1e2c4a9f725daed3f91dd4f5609ae54ebe93 diff --git a/ltt-sessiond/main.c b/ltt-sessiond/main.c index 85ac06be9..d61cd7bc5 100644 --- a/ltt-sessiond/main.c +++ b/ltt-sessiond/main.c @@ -567,6 +567,8 @@ static int update_kernel_pollfd(void) /* Adding the quit pipe */ kernel_pollfd[nb_fd - 1].fd = thread_quit_pipe[0]; + kernel_pollfd[nb_fd - 1].events = + POLLHUP | POLLNVAL | POLLERR | POLLIN | POLLRDHUP | POLLPRI; return nb_fd; @@ -667,6 +669,8 @@ static void *thread_manage_kernel(void *data) goto error; } else if (ret == 0) { /* Should not happen since timeout is infinite */ + ERR("Return value of poll is 0 with an infinite timeout.\n" + "This should not have happened! Continuing..."); continue; } @@ -860,6 +864,9 @@ static int update_apps_cmd_pollfd(unsigned int nb_fd, unsigned int old_nb_fd, /* First fd is always the quit pipe */ (*pollfd)[0].fd = thread_quit_pipe[0]; + (*pollfd)[0].events = + POLLHUP | POLLNVAL | POLLERR | POLLIN | POLLRDHUP | POLLPRI; + /* Apps command pipe */ (*pollfd)[1].fd = apps_cmd_pipe[0]; (*pollfd)[1].events = POLLIN; @@ -880,6 +887,16 @@ static int update_apps_cmd_pollfd(unsigned int nb_fd, unsigned int old_nb_fd, } } + if (nb_fd < 2) { + /* + * There should *always* be at least two fds in the pollfd. This safety + * check make sure the poll() will actually try on those two pipes at + * best which are the thread_quit_pipe and apps_cmd_pipe. + */ + nb_fd = 2; + MSG("nb_fd < 2 --> Not good! Continuing..."); + } + /* Destroy old pollfd */ free(old_pollfd); @@ -899,7 +916,7 @@ error: */ static void *thread_manage_apps(void *data) { - int i, ret, count; + int i, ret, current_nb_fd; unsigned int nb_fd = 2; int update_poll_flag = 1; struct pollfd *pollfd = NULL; @@ -908,6 +925,7 @@ static void *thread_manage_apps(void *data) DBG("[thread] Manage application started"); ust_cmd.sock = -1; + current_nb_fd = nb_fd; while (1) { /* See if we have a valid socket to add to pollfd */ @@ -918,7 +936,7 @@ static void *thread_manage_apps(void *data) /* The pollfd struct must be updated */ if (update_poll_flag) { - ret = update_apps_cmd_pollfd(nb_fd, ARRAY_SIZE(pollfd), &pollfd); + ret = update_apps_cmd_pollfd(nb_fd, current_nb_fd, &pollfd); if (ret < 0) { /* malloc failed so we quit */ goto error; @@ -978,8 +996,8 @@ static void *thread_manage_apps(void *data) } } - count = nb_fd; - for (i = 2; i < count; i++) { + current_nb_fd = nb_fd; + for (i = 2; i < current_nb_fd; i++) { /* Apps socket is closed/hungup */ switch (pollfd[i].revents) { case POLLERR: @@ -994,7 +1012,7 @@ static void *thread_manage_apps(void *data) } } - if (nb_fd != count) { + if (nb_fd != current_nb_fd) { update_poll_flag = 1; } } @@ -1095,6 +1113,8 @@ static void *thread_registration_apps(void *data) /* First fd is always the quit pipe */ pollfd[0].fd = thread_quit_pipe[0]; + pollfd[0].events = + POLLHUP | POLLNVAL | POLLERR | POLLIN | POLLRDHUP | POLLPRI; /* Apps socket */ pollfd[1].fd = apps_sock; @@ -2609,6 +2629,8 @@ static void *thread_manage_clients(void *data) /* First fd is always the quit pipe */ pollfd[0].fd = thread_quit_pipe[0]; + pollfd[0].events = + POLLHUP | POLLNVAL | POLLERR | POLLIN | POLLRDHUP | POLLPRI; /* Apps socket */ pollfd[1].fd = client_sock;