From 7934d7aa56f33ff717a7738f20b5742666128819 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Fri, 23 Mar 2007 19:43:48 +0000 Subject: [PATCH] Fixed net_Read and net_Write (poll can be interrupted). --- src/network/io.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/network/io.c b/src/network/io.c index 15ec75330c..ad8b8fd6f3 100644 --- a/src/network/io.c +++ b/src/network/io.c @@ -296,6 +296,8 @@ net_ReadInner (vlc_object_t *restrict p_this, unsigned fdc, const int *fdv, switch (poll (ufd, fdc, 500)) { case -1: + if( errno == EINTR ) + continue; goto error; case 0: // timeout @@ -320,13 +322,14 @@ net_ReadInner (vlc_object_t *restrict p_this, unsigned fdc, const int *fdv, } else { - if (ufd[i].revents & POLLRDHUP) + if( ufd[i].revents & POLLRDHUP ) return 0; // EOF, read() would yield 0 } fdc = 1; fdv += i; vsv += i; + break; } @@ -378,7 +381,7 @@ net_ReadInner (vlc_object_t *restrict p_this, unsigned fdc, const int *fdv, p_buf += n; i_buflen -= n; - if ((n == 0) || !waitall) + if( n == 0 || !waitall ) break; } return i_total; @@ -443,6 +446,8 @@ ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs, switch (val) { case -1: + if( errno == EINTR ) + continue; msg_Err (p_this, "Write error: %s", net_strerror (net_errno)); goto out; -- 2.39.5