health_code_update();
while (1) {
- int handled_event;
-
DBG3("[ht-thread] Polling.");
/* Inifinite blocking call, waiting for transmission */
restart:
- handled_event = 0;
health_poll_entry();
ret = lttng_poll_wait(&events, -1);
DBG3("[ht-thread] Returning from poll on %d fds.",
continue;
}
- if (revents & (LPOLLERR | LPOLLHUP | LPOLLRDHUP)) {
+ if (revents & LPOLLIN) {
+ /* Get socket from dispatch thread. */
+ size_ret = lttng_read(ht_cleanup_pipe[0], &ht,
+ sizeof(ht));
+ if (size_ret < sizeof(ht)) {
+ PERROR("ht cleanup notify pipe");
+ goto error;
+ }
+ health_code_update();
+ /*
+ * The whole point of this thread is to call
+ * lttng_ht_destroy from a context that is NOT:
+ * 1) a read-side RCU lock,
+ * 2) a call_rcu thread.
+ */
+ lttng_ht_destroy(ht);
+
+ health_code_update();
+ } else if (revents & (LPOLLERR | LPOLLHUP | LPOLLRDHUP)) {
ERR("ht cleanup pipe error");
goto error;
- } else if (!(revents & LPOLLIN)) {
- /* No POLLIN and not a catched error, stop the thread. */
- ERR("ht cleanup failed. revent: %u", revents);
- goto error;
- }
-
- /* Get socket from dispatch thread. */
- size_ret = lttng_read(ht_cleanup_pipe[0], &ht,
- sizeof(ht));
- if (size_ret < sizeof(ht)) {
- PERROR("ht cleanup notify pipe");
+ } else {
+ ERR("Unexpected poll events %u for sock %d", revents, pollfd);
goto error;
}
- health_code_update();
- /*
- * The whole point of this thread is to call
- * lttng_ht_destroy from a context that is NOT:
- * 1) a read-side RCU lock,
- * 2) a call_rcu thread.
- */
- lttng_ht_destroy(ht);
-
- health_code_update();
- }
-
- /* Only check cleanup quit when no more work to do. */
- if (handled_event) {
- continue;
}
for (i = 0; i < nb_fd; i++) {