int already_empty = 0;
eDebug("FILEPUSH THREAD START");
- // this is a race. FIXME.
/* we set the signal to not restart syscalls, so we can detect our signal. */
struct sigaction act;
act.sa_flags = 0;
sigaction(SIGUSR1, &act, 0);
+ hasStarted();
+
dest_pos = lseek(m_fd_dest, 0, SEEK_CUR);
source_pos = m_raw_source.lseek(0, SEEK_CUR);
// eDebug("wrote %d bytes", w);
if (w <= 0)
{
- if (errno == -EINTR)
+ if (errno == EINTR)
continue;
break;
// ... we would stop the thread
}
- /* this should flush all written pages to disk. */
- posix_fadvise(m_fd_dest, dest_pos, w, POSIX_FADV_DONTNEED);
-
+// posix_fadvise(m_fd_dest, dest_pos, w, POSIX_FADV_DONTNEED);
+
dest_pos += w;
written_since_last_sync += w;
{
eDebug("sending PVR commit");
already_empty = 1;
- if (::ioctl(m_fd_dest, PVR_COMMIT) == EINTR)
+ if (::ioctl(m_fd_dest, PVR_COMMIT) < 0 && errno == EINTR)
continue;
eDebug("commit done");
/* well check again */
void eFilePushThread::stop()
{
- if (!thread_running()) /* FIXME: races */
+ /* if we aren't running, don't bother stopping. */
+ if (!sync())
return;
+
m_stop = 1;
sendSignal(SIGUSR1);
kill();