From: Andreas Monzner Date: Mon, 28 Jan 2008 16:00:49 +0000 (+0000) Subject: errno handling X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=0fb354eb517927bd6c8465523800e6ee398a1db7;hp=bc80bd34c76a4e99a8dce2e01add213ca91e8a3d errno handling --- diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index 931c6c7..73cedc3 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -632,10 +632,18 @@ RESULT eDVBTSRecorder::startPID(int pid) } m_pids[pid] = fd; #else - if (::ioctl(m_source_fd, DMX_ADD_PID, pid)) - perror("DMX_ADD_PID"); - else - m_pids[pid] = 1; + bool retry=false; + while(true) { + if (::ioctl(m_source_fd, DMX_ADD_PID, pid) < 0) { + perror("DMX_ADD_PID"); + if (errno == EAGAIN || errno == EINTR) { + eDebug("retry!"); + continue; + } + } else + m_pids[pid] = 1; + break; + } #endif return 0; } @@ -648,8 +656,16 @@ void eDVBTSRecorder::stopPID(int pid) #else if (m_pids[pid] != -1) { - if (::ioctl(m_source_fd, DMX_REMOVE_PID, pid)) - perror("DMX_REMOVE_PID"); + while(true) { + if (::ioctl(m_source_fd, DMX_REMOVE_PID, pid) < 0) { + perror("DMX_REMOVE_PID"); + if (errno == EAGAIN || errno == EINTR) { + eDebug("retry!"); + continue; + } + } + break; + } } #endif m_pids[pid] = -1;