[linux-audio-dev] How to kill a rogue (p)thread

Arve Knudsen aknuds-1 at broadpark.no
Wed Mar 31 16:15:15 UTC 2004


On Wed, 31 Mar 2004 12:24:31 +0200, Jens M Andreasen 
<jens.andreasen at chello.se> wrote:

> On ons, 2004-03-31 at 11:02, Jens M Andreasen wrote:
>
>> So go for autonomous threads. Your code will be easier to read and
>> maintain, and therefore also more likely to be correct.
>>
The thing is I don't have complete control over the audio thread, a user 
defined callback is involved. In working on the ALSA implementation of the 
PortAudio library there has been a request for realtime scheduling of the 
audio thread, similar to the older OSS implementation. The OSS 
implementation starts both a watchdog and a canary thread; the watchdog 
will kill the audio thread (with SIGKILL) if it doesn't respond within 
3-second intervals, or lower it's priority if the (normal priority) canary 
thread is starved.

> Just for the record. You probably already know this ...
>
> I forgot to mention the pthread_cleanup_push/pop pair which can make
> life somewhat easier when the reason for termination is not known at
> compile time.
>
> This of course implies use of pthread_exit instead of return.
>
> Last time I checked they were defined as macros, so gcc -Wall might bark
> at you when you are cascading several instances in the same function.
>
I love the push/pop combination :] It leads to easy cleanup when the audio 
thread exits, I don't think this will be invoked however if I kill it with 
SIGKILL however. Maybe a user defined signal, where the thread will issue 
pthread_exit in the handling function? Either that or I could perhaps go 
for the asynchronous pthread_cancel, and use a different mechanism for 
requesting shutdown of the audio thread.

Arve



More information about the Linux-audio-dev mailing list