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