/* 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;
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;
}
/* 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;
* best which are the thread_quit_pipe and apps_cmd_pipe.
*/
nb_fd = 2;
+ MSG("nb_fd < 2 --> Not good! Continuing...");
}
/* Destroy old pollfd */
/* 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;
/* Thread quit pipe has been closed. Killing thread. */
if (pollfd[0].revents == POLLNVAL) {
goto error;
- } else if (pollfd[1].revents == POLLERR) {
- ERR("Register apps socket poll error");
- goto error;
}
- sock = lttcomm_accept_unix_sock(apps_sock);
- if (sock < 0) {
+ switch (pollfd[1].revents) {
+ case POLLNVAL:
+ case POLLHUP:
+ case POLLRDHUP:
+ case POLLERR:
+ ERR("Register apps socket poll error");
goto error;
- }
+ case POLLIN:
+ sock = lttcomm_accept_unix_sock(apps_sock);
+ if (sock < 0) {
+ goto error;
+ }
- /* Create UST registration command for enqueuing */
- ust_cmd = malloc(sizeof(struct ust_command));
- if (ust_cmd == NULL) {
- perror("ust command malloc");
- goto error;
- }
+ /* Create UST registration command for enqueuing */
+ ust_cmd = malloc(sizeof(struct ust_command));
+ if (ust_cmd == NULL) {
+ perror("ust command malloc");
+ goto error;
+ }
- /*
- * Using message-based transmissions to ensure we don't have to deal
- * with partially received messages.
- */
- ret = lttcomm_recv_unix_sock(sock, &ust_cmd->reg_msg,
- sizeof(struct ust_register_msg));
- if (ret < 0 || ret < sizeof(struct ust_register_msg)) {
- if (ret < 0) {
- perror("lttcomm_recv_unix_sock register apps");
- } else {
- ERR("Wrong size received on apps register");
+ /*
+ * Using message-based transmissions to ensure we don't have to deal
+ * with partially received messages.
+ */
+ ret = lttcomm_recv_unix_sock(sock, &ust_cmd->reg_msg,
+ sizeof(struct ust_register_msg));
+ if (ret < 0 || ret < sizeof(struct ust_register_msg)) {
+ if (ret < 0) {
+ perror("lttcomm_recv_unix_sock register apps");
+ } else {
+ ERR("Wrong size received on apps register");
+ }
+ free(ust_cmd);
+ close(sock);
+ continue;
}
- free(ust_cmd);
- close(sock);
- continue;
- }
- ust_cmd->sock = sock;
+ ust_cmd->sock = sock;
- DBG("UST registration received with pid:%d ppid:%d uid:%d"
- " gid:%d sock:%d name:%s (version %d.%d)",
- ust_cmd->reg_msg.pid, ust_cmd->reg_msg.ppid,
- ust_cmd->reg_msg.uid, ust_cmd->reg_msg.gid,
- ust_cmd->sock, ust_cmd->reg_msg.name,
- ust_cmd->reg_msg.major, ust_cmd->reg_msg.minor);
- /*
- * Lock free enqueue the registration request.
- * The red pill has been taken! This apps will be part of the *system*
- */
- cds_wfq_enqueue(&ust_cmd_queue.queue, &ust_cmd->node);
+ DBG("UST registration received with pid:%d ppid:%d uid:%d"
+ " gid:%d sock:%d name:%s (version %d.%d)",
+ ust_cmd->reg_msg.pid, ust_cmd->reg_msg.ppid,
+ ust_cmd->reg_msg.uid, ust_cmd->reg_msg.gid,
+ ust_cmd->sock, ust_cmd->reg_msg.name,
+ ust_cmd->reg_msg.major, ust_cmd->reg_msg.minor);
+ /*
+ * Lock free enqueue the registration request.
+ * The red pill has been taken! This apps will be part of the *system*
+ */
+ cds_wfq_enqueue(&ust_cmd_queue.queue, &ust_cmd->node);
- /*
- * Wake the registration queue futex.
- * Implicit memory barrier with the exchange in cds_wfq_enqueue.
- */
- futex_nto1_wake(&ust_cmd_queue.futex);
+ /*
+ * Wake the registration queue futex.
+ * Implicit memory barrier with the exchange in cds_wfq_enqueue.
+ */
+ futex_nto1_wake(&ust_cmd_queue.futex);
+ break;
+ }
}
error:
/* 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;