{
#if HAVE_DVB_API_VERSION >= 3
int fd = openDemux();
-
int n = DMX_SOURCE_FRONT0 + fenum;
int res = ::ioctl(fd, DMX_SET_SOURCE, &n);
if (res)
eDebug("DMX_SET_SOURCE failed! - %m");
+ else
+ source = fenum;
::close(fd);
return res;
#endif
int fd = openDemux();
int n = DMX_SOURCE_DVR0 + pvrnum;
int res = ::ioctl(fd, DMX_SET_SOURCE, &n);
+ source = -1;
::close(fd);
return res;
#endif
}
m_pids[pid] = fd;
#else
- if (::ioctl(m_source_fd, DMX_ADD_PID, pid))
- perror("DMX_ADD_PID");
- else
- m_pids[pid] = 1;
+ 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;
}
#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;