John Levon wrote: >Then you are probably doing a non-interruptible wait. Use >wait_event_interruptible, then you can check if the task woke up with : > > if (signal_pending(current)) > >or some such. > >The ctrl-c should be sending a signal.. > Correct, exactly as I have it. And I have added printk's that indicate that the wait state has ended because of something other than the condition that I was waiting for, so I think that the signal is unblocking the blocked I/O. The actual setup is this. The main process does two (could be up to 16) pthread_creates. Each of these created threads makes an ioctl call to the driver. The driver does a wait_event_interruptable. If the irq happens, I set the condition and wake the wait queue in the irq handler and return from the handler. The calling blocked thread returns, does whatever it is supposed to and then, if necessary, does the ioctl call again. If something other than the correct condition awakens the wait_event_interruptable, part of the data returned to the calling thread indicates an abort condition which breaks any further calls by this thread and the thread ends. I assume that the main process and the two blocked threads all get the ctrl-c signal and terminate. -- Best regards, David Stroupe Keyed-Up Software 5307 Faireast Court Arlington, Texas 76018-1683 817/557-4903 voice 817/472-0408 fax -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/