pthread_sigaction() ?
Xavier Roche
roche+kml2@exalead.com
Wed May 18 11:44:00 GMT 2011
Hi folks,
POSIX defines pthread_kill(pthread_t thread, int sig) to deliver a
signal to a specific thread.
But there is no way to handle it properly without overriding the global
signal handler ; ie. a given thread can not override locally the signal
handler for a specific purpose without a tight cooperation with the rest
of the process. And even with a cooperative process, handling a signal
differently for a given thread requires some acrobatic code (locking is
in theory forbidden as non signal-safe for example)
I was wondering why such function does not exist yet:
int pthread_sigaction_np(int signum, const struct sigaction *act,
struct sigaction *oldact);
(or
int pthread_sigaction_np(pthread_t thread, int signum,
const struct sigaction *act,
struct sigaction *oldact);
?)
Some considerations regarding priority of handlers would have to be
solved first ; it. sigation() handler vs. pthread_sigaction() handler
(the two could override each other depending on the ordering, for example)
Any thoughts on this ? No use case maybe ? [my use case was the ability
to locally handle signals to be able to siglongjmp() back to a defined
state on a given code section, without modifying the global signal handler]
(*)
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_kill.html>
More information about the Libc-help
mailing list