[MPlayer-dev-eng] [PATCH v3 4/5] stream_pvr: fix bogus error message on device poll timeout

Reza Arbab arbab at panix.com
Fri Feb 12 17:29:47 CET 2016


The error check for the call to poll() should actually be for the
subsequent read(). Move it there.

Add a different check for poll(), to correctly report timeout.

Signed-off-by: Reza Arbab <arbab at panix.com>
---
 v2:
  * Fix error checking on read() in addition to poll().

 stream/stream_pvr.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/stream/stream_pvr.c b/stream/stream_pvr.c
index cbf4f17..4657210 100644
--- a/stream/stream_pvr.c
+++ b/stream/stream_pvr.c
@@ -1629,9 +1629,15 @@ pvr_stream_read (stream_t *stream, char *buffer, int size)
     pfds[0].fd = fd;
     pfds[0].events = POLLIN | POLLPRI;
 
-    rk = size - pos;
+    if (!poll (pfds, 1, 500))
+    {
+      mp_msg (MSGT_OPEN, MSGL_ERR,
+              "%s 500ms timeout polling stream device\n", LOG_LEVEL_PVR);
+      return -1;
+    }
 
-    if (poll (pfds, 1, 500) <= 0)
+    rk = read (fd, &buffer[pos], size-pos);
+    if (rk < 0)
     {
       mp_msg (MSGT_OPEN, MSGL_ERR,
               "%s failed with errno %d when reading %d bytes\n",
@@ -1639,13 +1645,12 @@ pvr_stream_read (stream_t *stream, char *buffer, int size)
       break;
     }
 
-    rk = read (fd, &buffer[pos], rk);
-    if (rk > 0)
-    {
-      pos += rk;
-      mp_msg (MSGT_OPEN, MSGL_DBG3,
-              "%s read (%d) bytes\n", LOG_LEVEL_PVR, pos);
-    }
+    if (!rk)
+      break;
+
+    pos += rk;
+    mp_msg (MSGT_OPEN, MSGL_DBG3,
+            "%s read (%d) bytes\n", LOG_LEVEL_PVR, pos);
   }
 
   if (!pos)
-- 
2.5.0



More information about the MPlayer-dev-eng mailing list