// 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);
if (m_buf_end < 0)
{
m_buf_end = 0;
- if (errno == EINTR)
+ if (errno == EINTR || errno == EBUSY || errno == EAGAIN)
continue;
if (errno == EOVERFLOW)
{
}
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. */