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).