From: Daniel D. <ds...@ge...> - 2008-05-29 16:04:39
|
Ludovic Rousseau wrote: > I have an application with two threads: > - thread A is using usb_interrupt_read() with a big timeout (3600 > seconds ie 1 hour) waiting for an event > - thread B is using usb_bulk_write()/usb_bulk_read() to talk to the USB device > > When the user send the Ctrl-C signal the thread A is terminated (using > pthread_cancel()) and thread B is sending a last USB command (to power > off the device). > > The problem is that thread B is now blocked in usb_bulk_write(). I > guess that thread A is terminated without releasing the event handling > so thread B is waiting until timeout of thread A expires (1 hour in my > case). Blah. I would hope that the mutex is automatically unlocked on ctrl+c, but the issue here is that the other thread is waiting on a condition variable, not the mutex. The function that unlocks the mutex always wakes up everyone sleeping on that condition, but obviously on ctrl+c that function will not be called. Might need another solution here then :( Will give it some thought... Daniel |