X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4510fa62a33b31fec442fd0d77eb682d93ebf7e6..cf57753fe26b8468048598a53124d876f216bc3d:/lib/base/filepush.cpp diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index e99e956c..91f24ba0 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -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,15 +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"); - already_empty = 1; - if (::ioctl(m_fd_dest, PVR_COMMIT) < 0 && errno == EINTR) - continue; - eDebug("commit done"); - /* well check again */ - continue; + struct pollfd pfd; + pfd.fd = m_fd_dest; + pfd.events = POLLIN; + 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 @@ -224,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); } @@ -257,10 +263,7 @@ void eFilePushThread::stop() m_stop = 1; - // fixmee.. here we need a better solution to ensure - // that the thread context take notice of the signal - // even when no syscall is in progress - eDebug("if enigma hangs here, the filepush thread is non-responsive. FIX THAT DAMN THREAD."); + eDebug("stopping thread."); /* just do it ONCE. it won't help to do this more than once. */ sendSignal(SIGUSR1); kill(0); }