Fix: lttng-live: 100ms active poll delay
[babeltrace.git] / formats / lttng-live / lttng-live-comm.c
index 785f5f37022609a702cddf3341e20b32611d0d1c..568a4a1e806d64db8ad6191d4f0fcce25670ea21 100644 (file)
@@ -33,6 +33,7 @@
 #include <inttypes.h>
 #include <fcntl.h>
 #include <sys/mman.h>
+#include <poll.h>
 
 #include <babeltrace/ctf/ctf-index.h>
 
@@ -54,6 +55,8 @@
 #include "lttng-live.h"
 #include "lttng-viewer-abi.h"
 
+#define ACTIVE_POLL_DELAY      100     /* ms */
+
 /*
  * Memory allocation zeroed
  */
@@ -869,7 +872,7 @@ int get_new_metadata(struct lttng_live_ctx *ctx,
 {
        int ret = 0;
        struct lttng_live_viewer_stream *metadata_stream;
-       size_t size;
+       size_t size, len_read = 0;;
 
        metadata_stream = viewer_stream->ctf_trace->metadata_stream;
        if (!metadata_stream) {
@@ -890,7 +893,13 @@ int get_new_metadata(struct lttng_live_ctx *ctx,
                 * negative value on error.
                 */
                ret = get_one_metadata_packet(ctx, metadata_stream);
-       } while (ret > 0);
+               if (ret > 0) {
+                       len_read += ret;
+               }
+               if (!len_read) {
+                       (void) poll(NULL, 0, ACTIVE_POLL_DELAY);
+               }
+       } while (ret > 0 || !len_read);
 
        if (fclose(metadata_stream->metadata_fp_write))
                perror("fclose");
@@ -986,7 +995,7 @@ retry:
                break;
        case LTTNG_VIEWER_INDEX_RETRY:
                printf_verbose("get_next_index: retry\n");
-               sleep(1);
+               (void) poll(NULL, 0, ACTIVE_POLL_DELAY);
                goto retry;
        case LTTNG_VIEWER_INDEX_HUP:
                printf_verbose("get_next_index: stream hung up\n");
@@ -1485,6 +1494,8 @@ void lttng_live_read(struct lttng_live_ctx *ctx)
                        ret = ask_new_streams(ctx);
                        if (ret < 0)
                                goto end_free;
+                       if (!ctx->session->stream_count)
+                               (void) poll(NULL, 0, ACTIVE_POLL_DELAY);
                }
 
                g_hash_table_foreach(ctx->session->ctf_traces, add_traces,
This page took 0.026965 seconds and 4 git commands to generate.