[linux-dvb] down_interruptible usage

Johannes Stezenbach js at linuxtv.org
Sat Aug 6 21:08:07 CEST 2005


Kenneth Aafløy wrote:
> I've been searching for the reason why I was _loosing_ filters
> in the demuxer, and I've found out the subtle reason.
> 
> In dmxdev.c, the dvb_dmxdev_release is calling dvb_dmxdev_filter_free.
> This function uses down_interruptible to wait for two mutexes, but
> if those are interrupted by a signal, the filter will be _lost_.
> This is easily reproducible with a program that creates a few threads,
> which open and close the filters regulary, and then running/interrupting
> this program some number of times.
> 
> Is changing all down_interruptible (that protects freeing a structure)
> to down(), or will this have other unseen side-effects?

Generally speaking, a driver should only sleep uninterruptibly
if you can make absolutely sure it won't sleep forever, even
in an obscure error case. If you can guarantee that from
reading the code, then it's best to change the down() to
down_interruptible(), otherwise it's better to handle the
error from down_interruptible() correctly.

(If a process is stuck in uninterruptible sleep you usually
have to reboot to get rid of it, which is bad.)

Johannes




More information about the linux-dvb mailing list