X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/fa664bead71329a67c53bc1814a3d68d397045d1..82ea06047ff217e5f60959f9982ce0337483e5a5:/lib/base/filepush.cpp diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 7f85eac2..1999707f 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -6,7 +6,7 @@ #define PVR_COMMIT 1 -FILE *f = fopen("/log.ts", "wb"); +//FILE *f = fopen("/log.ts", "wb"); eFilePushThread::eFilePushThread(int io_prio_class, int io_prio_level, int blocksize) :prio_class(io_prio_class), prio(io_prio_level), m_messagepump(eApp, 0) @@ -105,11 +105,11 @@ void eFilePushThread::thread() absolutely forbidden is to return EINTR and consume a non-aligned number of bytes. */ int w = write(m_fd_dest, m_buffer + m_buf_start, m_buf_end - m_buf_start); - fwrite(m_buffer + m_buf_start, 1, m_buf_end - m_buf_start, f); +// fwrite(m_buffer + m_buf_start, 1, m_buf_end - m_buf_start, f); // 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,6 +174,15 @@ 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. */