If I have a process open /dev/dvb/adapter0/dvr0 RDONLY and then kill it (^C), the release function sometimes fails because the lock is still held:
if (mutex_lock_interruptible(&dmxdev->mutex))
return -ERESTARTSYS;
This means that the dvbdev->readers semaphore is never updated and any future
attempts to open dvr0 will fail:
[ 1103.961000] function : dvb_dvr_open
[ 1106.540000] function : dvb_dvr_release
[ 1106.540000] dvb_dvr_release : readers++
[ 1111.718000] function : dvb_dvr_open
[ 1115.800000] function : dvb_dvr_release
[ 1118.931000] function : dvb_dvr_open
[ 1118.931000] dvb_dvr_open : BUSY (dvbdev->readers=0)
Everything works fine if I replace the mutex_lock_interruptible check with:
mutex_lock(&dmxdev->mutex);
[ 1339.409000] function : dvb_dvr_open
[ 1343.711000] function : dvb_dvr_release
[ 1343.727000] dvb_dvr_release : readers++
[ 1344.441000] function : dvb_dvr_open
[ 1350.618000] function : dvb_dvr_release
[ 1350.618000] dvb_dvr_release : readers++
[ 1351.302000] function : dvb_dvr_open
[ 1356.017000] function : dvb_dvr_release
[ 1356.034000] dvb_dvr_release : readers++
[ 1356.781000] function : dvb_dvr_open
[ 1360.145000] function : dvb_dvr_release
[ 1360.164000] dvb_dvr_release : readers++
[ 1360.837000] function : dvb_dvr_open
[ 1363.773000] function : dvb_dvr_release
[ 1363.773000] dvb_dvr_release : readers++
[ 1498.123000] function : dvb_dvr_open
[ 1501.139000] function : dvb_dvr_release
[ 1501.156000] dvb_dvr_release : readers++
[ 1501.856000] function : dvb_dvr_open
[ 1503.410000] function : dvb_dvr_release
[ 1503.427000] dvb_dvr_release : readers++
[ 1503.923000] function : dvb_dvr_open
[ 1511.609000] function : dvb_dvr_release
[ 1511.627000] dvb_dvr_release : readers++
--
Simon Arlott
signature.asc
Description: OpenPGP digital signature
_______________________________________________ linux-dvb mailing list [email protected] http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
