UST consumer: perform buffer flush on hang up
[lttng-tools.git] / liblttng-consumer / lttng-consumer.c
index 7644eac2cefccb7d223c8310c81f7289864f4461..54338e800619a728f70ca44673c6f346a0ebecc0 100644 (file)
@@ -845,9 +845,23 @@ void *lttng_consumer_thread_poll_fds(void *data)
                                ERR("Polling fd %d tells fd is not open.", pollfd[i].fd);
                                consumer_del_stream(local_stream[i]);
                                num_hup++;
-                       } else if ((pollfd[i].revents & POLLHUP &&
-                                       !(pollfd[i].revents & POLLIN))) {
-                               DBG("Polling fd %d tells it has hung up.", pollfd[i].fd);
+                       } else if ((pollfd[i].revents & POLLHUP) &&
+                                       !(pollfd[i].revents & POLLIN)) {
+                               if (consumer_data.type == LTTNG_CONSUMER_UST) {
+                                       DBG("Polling fd %d tells it has hung up. Attempting flush and read.",
+                                               pollfd[i].fd);
+                                       if (!local_stream[i]->hangup_flush_done) {
+                                               lttng_ustconsumer_on_stream_hangup(local_stream[i]);
+                                               /* try reading after flush */
+                                               ret = ctx->on_buffer_ready(local_stream[i], ctx);
+                                               /* it's ok to have an unavailable sub-buffer */
+                                               if (ret == EAGAIN) {
+                                                       ret = 0;
+                                               }
+                                       }
+                               } else {
+                                       DBG("Polling fd %d tells it has hung up.", pollfd[i].fd);
+                               }
                                consumer_del_stream(local_stream[i]);
                                num_hup++;
                        }
This page took 0.023229 seconds and 4 git commands to generate.