X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconsumer.c;h=ec59401053a18bf510c2748fff843b137e5ccee2;hb=61076f74f9e7ae286fe140d82ed0ac86895e3690;hp=80dedd5c6cfd057397eef3706ec62ef9717889e7;hpb=fbb2c21aac1386b7752f6254b2bd0bf001fa0ac1;p=lttng-tools.git diff --git a/src/common/consumer.c b/src/common/consumer.c index 80dedd5c6..ec5940105 100644 --- a/src/common/consumer.c +++ b/src/common/consumer.c @@ -19,6 +19,7 @@ #define _GNU_SOURCE #include +#include #include #include #include @@ -491,8 +492,15 @@ int lttng_consumer_poll_socket(struct pollfd *consumer_sockpoll) { int num_rdy; +restart: num_rdy = poll(consumer_sockpoll, 2, -1); if (num_rdy == -1) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart; + } perror("Poll error"); goto exit; } @@ -600,7 +608,7 @@ void lttng_consumer_sync_trace_file( if (orig_offset < stream->chan->max_sb_size) { return; } - lttng_sync_file_range(outfd, orig_offset - stream->chan->max_sb_size, + sync_file_range(outfd, orig_offset - stream->chan->max_sb_size, stream->chan->max_sb_size, SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE @@ -741,8 +749,6 @@ int lttng_consumer_on_read_subbuffer_mmap( ERR("Unknown consumer_data type"); assert(0); } - - return 0; } /* @@ -897,10 +903,17 @@ void *lttng_consumer_thread_poll_fds(void *data) pthread_mutex_unlock(&consumer_data.lock); /* poll on the array of fds */ + restart: DBG("polling on %d fd", nb_fd + 1); num_rdy = poll(pollfd, nb_fd + 1, consumer_poll_timeout); DBG("poll num_rdy : %d", num_rdy); if (num_rdy == -1) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart; + } perror("Poll error"); lttng_consumer_send_error(ctx, CONSUMERD_POLL_ERROR); goto end;