[vdr] Too many open files - error

Artur Skawina art_k at o2.pl
Tue Feb 20 20:38:23 CET 2007


Kartsa wrote:
> I was about to test the performance of vdr when I stumbled on this message
> 
> ERROR: /dev/dvb/adapter0/demux0: Too many open files
> 
> I do not recall seeing this earlier. This came when fourth simultaneous
> recording started.
> 
> Is this a vdr, dvb, or firmware issue? Seems like dvb but I really do
> not know.
> 
> This is what was in the log after the fourth recording
> 
> Feb 19 21:53:00 vdr: [2226] timer 4 (7 2153-2200 'TestRec4') start
> Feb 19 21:53:00 vdr: [2226] record
> /srv/vdr/TestRec4/2007-02-19.21.53.50.99.rec
> Feb 19 21:53:00 vdr: [2226] ERROR: /dev/dvb/adapter0/demux0: Too many
> open files
> Feb 19 21:53:00 vdr: [2226] ERROR (dvbdevice.c,673): Too many open files
> Feb 19 21:53:00 vdr: [2226] ERROR: can't set PID 680 on device 1
> Feb 19 21:53:00 vdr: [2226] ERROR (dvbdevice.c,688): Bad file descriptor

grep -20 -r EMFILE *
dvb/dvb-core/dmxdev.c-static int dvb_demux_open(struct inode *inode, struct file *file)
dvb/dvb-core/dmxdev.c-{
dvb/dvb-core/dmxdev.c-  struct dvb_device *dvbdev = file->private_data;
dvb/dvb-core/dmxdev.c-  struct dmxdev *dmxdev = dvbdev->priv;
dvb/dvb-core/dmxdev.c-  int i;
dvb/dvb-core/dmxdev.c-  struct dmxdev_filter *dmxdevfilter;
dvb/dvb-core/dmxdev.c-
dvb/dvb-core/dmxdev.c-  if (!dmxdev->filter)
dvb/dvb-core/dmxdev.c-          return -EINVAL;
dvb/dvb-core/dmxdev.c-
dvb/dvb-core/dmxdev.c-  if (mutex_lock_interruptible(&dmxdev->mutex))
dvb/dvb-core/dmxdev.c-          return -ERESTARTSYS;
dvb/dvb-core/dmxdev.c-
dvb/dvb-core/dmxdev.c-  for (i = 0; i < dmxdev->filternum; i++)
dvb/dvb-core/dmxdev.c-          if (dmxdev->filter[i].state == DMXDEV_STATE_FREE)
dvb/dvb-core/dmxdev.c-                  break;
dvb/dvb-core/dmxdev.c-
dvb/dvb-core/dmxdev.c-  if (i == dmxdev->filternum) {
dvb/dvb-core/dmxdev.c-          mutex_unlock(&dmxdev->mutex);
dvb/dvb-core/dmxdev.c:          return -EMFILE;
dvb/dvb-core/dmxdev.c-  }
dvb/dvb-core/dmxdev.c-
dvb/dvb-core/dmxdev.c-  dmxdevfilter = &dmxdev->filter[i];
dvb/dvb-core/dmxdev.c-  mutex_init(&dmxdevfilter->mutex);
dvb/dvb-core/dmxdev.c-  file->private_data = dmxdevfilter;
dvb/dvb-core/dmxdev.c-
dvb/dvb-core/dmxdev.c-  dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192);
dvb/dvb-core/dmxdev.c-  dmxdevfilter->type = DMXDEV_TYPE_NONE;
dvb/dvb-core/dmxdev.c-  dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED);
dvb/dvb-core/dmxdev.c-  dmxdevfilter->feed.ts = NULL;
dvb/dvb-core/dmxdev.c-  init_timer(&dmxdevfilter->timer);
dvb/dvb-core/dmxdev.c-
dvb/dvb-core/dmxdev.c-  mutex_unlock(&dmxdev->mutex);
dvb/dvb-core/dmxdev.c-  return 0;
dvb/dvb-core/dmxdev.c-}

IOW you ran out of filters.
yes, the error code should probably be different (eg EBUSY).



More information about the vdr mailing list