X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/bcfee58f1b479c453ba3e400bef03e7c3645e73b..e68a1617b7c1efbedf8b28309943dd7669daaad0:/lib/base/filepush.cpp diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 1e5685ca..ed2a2185 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -109,7 +109,7 @@ void eFilePushThread::thread() // eDebug("wrote %d bytes", w); if (w <= 0) { - if (errno == EINTR) + if (errno == EINTR || errno == EAGAIN || errno == EBUSY) continue; eDebug("eFilePushThread WRITE ERROR"); sendEvent(evtWriteError); @@ -165,7 +165,7 @@ void eFilePushThread::thread() if (m_buf_end < 0) { m_buf_end = 0; - if (errno == EINTR) + if (errno == EINTR || errno == EBUSY || errno == EAGAIN) continue; if (errno == EOVERFLOW) { @@ -174,15 +174,28 @@ void eFilePushThread::thread() } eDebug("eFilePushThread *read error* (%m) - not yet handled"); } + + /* a read might be mis-aligned in case of a short read. */ + int d = m_buf_end % m_blocksize; + if (d) + { + m_raw_source.lseek(-d, SEEK_CUR); + m_buf_end -= d; + } + if (m_buf_end == 0) { /* on EOF, try COMMITting once. */ if (m_send_pvr_commit && !already_empty) { eDebug("sending PVR commit"); + + struct pollfd pfd[1] = {m_fd_dest, POLLHUP}; + 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; +// if (::ioctl(m_fd_dest, PVR_COMMIT) < 0 && errno == EINTR) +// continue; eDebug("commit done"); /* well check again */ continue;