summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
733bb3d)
The thread_quit_pipe event field of the pollfd was not set nor zeroed.
At high rate UST registration and modifying the pollfd set frequently,
the session daemon hang on the poll() call even if the thread_quit_pipe
was closed and explain by poll() "undefined behavior".
Also add a MSG() and ERR() statement after some errors.
Signed-off-by: David Goulet <david.goulet@polymtl.ca>
/* Adding the quit pipe */
kernel_pollfd[nb_fd - 1].fd = thread_quit_pipe[0];
/* 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;
goto error;
} else if (ret == 0) {
/* Should not happen since timeout is infinite */
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...");
/* First fd is always the quit pipe */
(*pollfd)[0].fd = thread_quit_pipe[0];
/* 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;
/* Apps command pipe */
(*pollfd)[1].fd = apps_cmd_pipe[0];
(*pollfd)[1].events = POLLIN;
* best which are the thread_quit_pipe and apps_cmd_pipe.
*/
nb_fd = 2;
* best which are the thread_quit_pipe and apps_cmd_pipe.
*/
nb_fd = 2;
+ MSG("nb_fd < 2 --> Not good! Continuing...");
}
/* Destroy old pollfd */
}
/* Destroy old pollfd */
/* First fd is always the quit pipe */
pollfd[0].fd = thread_quit_pipe[0];
/* 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;
/* Apps socket */
pollfd[1].fd = apps_sock;
/* First fd is always the quit pipe */
pollfd[0].fd = thread_quit_pipe[0];
/* 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;
/* Apps socket */
pollfd[1].fd = client_sock;