setjmp() shares a single jmp_buf across all threads
Adam Megacz
gcj@lists.megacz.com
Mon Jan 14 13:14:00 GMT 2002
Andrew Haley <aph@cambridge.redhat.com> writes:
> Looks like gcc doesn't know about your threads package.
Hrm, I configured with --enable-threads=win32...
> Look in gcc/unwind-sjlj.c. See:
> void _Unwind_SjLj_Register (struct SjLj_Function_Context *fc)
This is completely bizarre; I put an infinite loop at the top of this
function, yet when I recompile/link/run programs that throw
exceptions, they don't hang.
After grepping through the source, I found that the symbol
_Unwind_SjLj_Register doesn't appear anywhere outside of
unwind-sjlj.c... where is this function called from?
> You need to provide some local way of getting/setting thread-specific
> data. I reckon if you fix this, everything will "just work". :-)
Yeah, gthr-win32.c defines an implementation (TlsSet/TlsGet) which
ought to work, I just don't think it's getting called.
Another question: what is the difference between the "builtin setjmp"
and the non-builtin setjmp? Does "builtin" mean that the compiler just
dumps out code to do setjmp's work instead of emitting a call to a
library function?
- a
More information about the Java
mailing list