[vdr] Too many open files - error

Kartsa kari at kniivila.com
Tue Feb 20 21:07:18 CET 2007


Artur Skawina kirjoitti:
> 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.
> 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).
>   
So, why did I ran out of filters? Why did it happen? Why doesn't it 
happen on my other vdr box? And what does it cause? The recording did 
succeed.

\\Kartsa



More information about the vdr mailing list