- eDebug("RECORDING THREAD START");
- // this is race. FIXME.
-
- /* we set the signal to not restart syscalls, so we can detect our signal. */
- struct sigaction act;
- act.sa_handler = signal_handler; // no, SIG_IGN doesn't do it :/
- act.sa_flags = 0;
- sigaction(SIGUSR1, &act, 0);
-
- /* m_stop must be evaluated after each syscall. */
- while (!m_stop)
- {
- /* first try flushing the bufptr */
- if (m_buf_start != m_buf_end)
- {
- // TODO: take care of boundaries.
- int w = write(m_fd_dest, m_buffer + m_buf_start, m_buf_end - m_buf_start);
- if (w <= 0)
- {
- if (errno == -EINTR)
- continue;
- eDebug("eDVBTSRecorder *write error* - not yet handled");
- // ... we would stop the thread
- }
- printf("TSRECORD: wrote %d bytes\n", w);
- m_buf_start += w;
- continue;
- }
-
- /* now fill our buffer. */
- m_buf_start = 0;
- m_buf_end = read(m_fd_source, m_buffer, sizeof(m_buffer));
- if (m_buf_end < 0)
- {
- m_buf_end = 0;
- if (errno == EINTR)
- continue;
- eDebug("eDVBTSRecorder *read error* - not yet handled");
- }
- printf("TSRECORD: read %d bytes\n", m_buf_end);
- }
-
- eDebug("RECORDING THREAD STOP");