I too am having problems using sigaltstack() in pthreads application.
Otto's quote earlier this year of the Single Unix Specification
http://www.sigmasoft.com/~openbsd/archives/html/openbsd-bugs/2006-03/msg00129.html
"Use of this function by library threads that are not bound to
kernel-scheduled entities results in undefined behavior."
http://www.unix.org/single_unix_specification/
does not make sense to me. Reading from the "man 3 pthreads":
Thread stacks
Each thread has (or should have) a different stack,
whether it be provided by a user attribute, or provided
automatically by the system. If a thread overflows its
stack, unpredictable results may occur. System-allocated
stacks (including that of the initial thread) are
typically allocated in such a way that a SIGSEGV signal is
delivered to the process when a stack overflows.
Signals handlers are normally run on the stack of the
currently executing thread. Hence, if you want to handle
the SIGSEGV signal, you should make use of sigaltstack(2)
or sigprocmask(2).
How are you suppose to handle SIGSEGV when a thread blows its stack, if
you cannot set the alternate stack for the SIGSEGV handler in the first
place?
There appears to be a contradiction here in the documentation. Are
pthreads not kernel scheduled entities?
--
Anthony C Howe Skype: SirWumpus SnertSoft
+33 6 11 89 73 78 AIM: SirWumpus Sendmail Milter Solutions
http://www.snert.com/ ICQ: 7116561 http://www.snertsoft.com/