[linux-audio-dev] How to kill a rogue (p)thread
Arve Knudsen
aknuds-1 at broadpark.no
Wed Mar 31 19:06:12 UTC 2004
On 31 Mar 2004 12:50:53 -0600, Jack O'Quin <joq at io.com> wrote:
>
>> On 31 Mar 2004 11:39:36 -0600, Jack O'Quin <joq at io.com> wrote:
>> > It doesn't look all that expensive. The magic is done by a platform-
>> > dependent compare-and-swap operation. On some SMP machines that can
>> > be slow, but generally only in high-contention situations (AFAIK).
>
> Arve Knudsen <aknuds-1 at broadpark.no> writes:
>> According to the comments it could involve a memory lock though,
>> wouldnt this be expensive either way?
>
> Dunno. Depends on the machine implementation.
>
> On the SMP machines I worked with a while back, the cost of a compare
> and swap was about 15 or 20 cycles (IIRC) when the cache line was
> available in the current CPU, but maybe ten times that if there was a
> dirty copy in some other CPU. These things tend to scale with memory
> and cache latencies more than with CPU speed, so the effect has likely
> become even more pronounced.
>
> For realtime, we need to look at the worst-case, so I guess that can
> be pretty bad. Still, even the worst case might be acceptable if it
> only happens twice per buffer.
What about pthread_kill with a user defined signal (SIGRTMIN <= sig <=
SIGRTMAX), where the handler will call pthread_exit? Then the registered
cleanup functions should be invoked as usual.
>> Maybe we could introduce a compile time conditional, and/or an
>> environment variable (default would be on)? Perhaps the canary could
>> be conditional as well.
>
> I don't see a compile-time option being much use. PortAudio is a
> shared library, its users will generally all run the same binary.
>
> An environment variable is clumsy, but would work. Is there any
> mechanism in PA for setting host-dependent options?
Of course I could provide extension functions accepting a PaStream *
instead, I think it would be a better idea. You would have to include
pa_linux_alsa.h. Eventually I'm thinking this stuff should be part of the
common pa_unix utility functions, so an extension for the UNIX
implementations could be introduced.
Regards
Arve Knudsen
More information about the Linux-audio-dev
mailing list