]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
tcp: handle ERRNO_AGAIN in tcp_fill_htsbuf_from_fd
authorJaroslav Kysela <perex@perex.cz>
Fri, 17 Feb 2017 10:41:38 +0000 (11:41 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 17 Feb 2017 10:42:03 +0000 (11:42 +0100)
src/tcp.c

index 11faad99dd9214171408d9f7ca23e4a1e034d381..616939cbd5514883a860af18d7d8529327556f4f 100644 (file)
--- a/src/tcp.c
+++ b/src/tcp.c
@@ -203,7 +203,7 @@ static int
 tcp_fill_htsbuf_from_fd(int fd, htsbuf_queue_t *hq)
 {
   htsbuf_data_t *hd = TAILQ_LAST(&hq->hq_q, htsbuf_data_queue);
-  int c;
+  int c, r;
 
   if(hd != NULL) {
     /* Fill out any previous buffer */
@@ -211,12 +211,14 @@ tcp_fill_htsbuf_from_fd(int fd, htsbuf_queue_t *hq)
 
     if(c > 0) {
 
-      c = read(fd, hd->hd_data + hd->hd_data_len, c);
-      if(c < 1)
+      do {
+        r = read(fd, hd->hd_data + hd->hd_data_len, c);
+      } while (r < 0 && ERRNO_AGAIN(errno));
+      if(r < 1)
        return -1;
 
-      hd->hd_data_len += c;
-      hq->hq_size += c;
+      hd->hd_data_len += r;
+      hq->hq_size += r;
       return 0;
     }
   }