Merge branch 'bug_263_fix_timeshift_live_transition' into experimental
authorghost <andreas.monzner@multimedia-labs.de>
Wed, 9 Dec 2009 18:55:31 +0000 (19:55 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Wed, 9 Dec 2009 18:55:31 +0000 (19:55 +0100)
lib/base/filepush.cpp

index 3412c84a3a0744f8994296172cdf0973ec9cebd8..91f24ba064026502d3b69316d89c2409bd133bec 100644 (file)
@@ -37,7 +37,6 @@ void eFilePushThread::thread()
        
        size_t written_since_last_sync = 0;
 
-       int already_empty = 0;
        eDebug("FILEPUSH THREAD START");
        
                /* we set the signal to not restart syscalls, so we can detect our signal. */
@@ -186,21 +185,23 @@ void eFilePushThread::thread()
                if (m_buf_end == 0)
                {
                                /* on EOF, try COMMITting once. */
-                       if (m_send_pvr_commit && !already_empty)
+                       if (m_send_pvr_commit)
                        {
-                               eDebug("sending PVR commit");
-                               
                                struct pollfd pfd;
                                pfd.fd = m_fd_dest;
                                pfd.events = POLLIN;
-                               poll(&pfd, 1, 10000);
-                               sleep(5); /* HACK to allow ES buffer to drain */
-                               already_empty = 1;
-//                             if (::ioctl(m_fd_dest, PVR_COMMIT) < 0 && errno == EINTR)
-//                                     continue;
-                               eDebug("commit done");
-                                               /* well check again */
-                               continue;
+                               switch (poll(&pfd, 1, 250)) // wait for 250ms
+                               {
+                                       case 0:
+                                               eDebug("wait for driver eof timeout");
+                                               continue;
+                                       case 1:
+                                               eDebug("wait for driver eof ok");
+                                               break;
+                                       default:
+                                               eDebug("wait for driver eof aborted by signal");
+                                               continue;
+                               }
                        }
                        
                                /* in stream_mode, we are sending EOF events 
@@ -230,7 +231,6 @@ void eFilePushThread::thread()
                        bytes_read += m_buf_end;
                        if (m_sg)
                                current_span_remaining -= m_buf_end;
-                       already_empty = 0;
                }
 //             printf("FILEPUSH: read %d bytes\n", m_buf_end);
        }