On 15.03.19, 18:42, "Jim Fehlig" <jfehlig@xxxxxxxx> wrote: On 2/7/19 8:41 AM, Michael Trapp wrote: > A timeout in the send request part of dump_virtio_metrics() > should prevent the send from looping forever. Did you experience that, or just being defensive? I've seen this situation due to an invalid setup on the hypervisor. Regards Michael > --- > libmetrics/libmetrics.c | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c > index d79a023..08a233f 100644 > --- a/libmetrics/libmetrics.c > +++ b/libmetrics/libmetrics.c > @@ -788,7 +788,8 @@ static char *get_virtio_metrics(void) > size_t pos; > size_t buf_size = (1 << 16); > const size_t req_len = (size_t) strlen(request); > - const time_t start_time = time(NULL); > + const time_t timeout = 5; > + time_t end_time; > > response = calloc(1UL, buf_size); > if (response == NULL) > @@ -803,19 +804,27 @@ static char *get_virtio_metrics(void) > } > > pos = 0; > + end_time = time(NULL) + timeout; > while (pos < req_len) { > ssize_t len = write(fd, &request[pos], req_len - pos); > if (len > 0) > pos += (size_t) len; > else { > - if (errno == EAGAIN) > + if (errno == EAGAIN) { > usleep(10000); > + if (time(NULL) > end_time) { > + libmsg("%s(): Unable to send metrics request" > + " - timeout after %us\n", __func__, timeout); > + goto error; > + } > + } > else > goto error; > } > } > > pos = 0; > + end_time = time(NULL) + timeout; > do { > ssize_t len = read(fd, &response[pos], buf_size - pos - 1); > if (len > 0) { > @@ -836,9 +845,9 @@ static char *get_virtio_metrics(void) > } else { > if (errno == EAGAIN) { > usleep(10000); > - if (time(NULL) > (start_time + 30)) { > - libmsg("Error, unable to read metrics" > - " - timeout after 30s\n"); > + if (time(NULL) > end_time) { > + libmsg("%s(): Unable to read metrics" > + " - timeout after %us\n", __func__, timeout); > goto error; > } > } else > _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list