git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
encoding.conf: add some polish two byte encoding transponders... thanks to Jarex
[enigma2.git]
/
lib
/
base
/
filepush.cpp
diff --git
a/lib/base/filepush.cpp
b/lib/base/filepush.cpp
index 1e5685caed94448f29bc8d573c88d8315c51896f..ed2a21855e19ee668d9ef17434944f9964ed2d51 100644
(file)
--- 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)
{
// 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);
continue;
eDebug("eFilePushThread WRITE ERROR");
sendEvent(evtWriteError);
@@
-165,7
+165,7
@@
void eFilePushThread::thread()
if (m_buf_end < 0)
{
m_buf_end = 0;
if (m_buf_end < 0)
{
m_buf_end = 0;
- if (errno == EINTR)
+ if (errno == EINTR
|| errno == EBUSY || errno == EAGAIN
)
continue;
if (errno == EOVERFLOW)
{
continue;
if (errno == EOVERFLOW)
{
@@
-174,15
+174,28
@@
void eFilePushThread::thread()
}
eDebug("eFilePushThread *read error* (%m) - not yet handled");
}
}
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");
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;
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;
eDebug("commit done");
/* well check again */
continue;