[Gc] Can sigaltstack be used in a GC registered thread?
Petter Urkedal
urkedal at nbi.dk
Mon May 21 13:58:47 PDT 2012
I should have mentioned that the code I was using is mostly pure. It
allocates memory and does some logging. Data created or altered by a
failed computation would not be used. Though, I see your point: I
should have checked available stack space before allocating to avoid
corrupting GC internal structures. Likewise for logging. Strangely, it
worked anyway.
On 2012-05-21, Boehm, Hans wrote:
> The core issue here is that stack overflow signals are essentially
> asynchronous. As far as the programmer is concerned, they can occur anywhere.
> Worse yet, they may occur at a "point in the code" that doesn't really
> exist, because the compiler has transformed the code. That means invariants
> may be arbitrarily broken, locks may be held, etc. Posix doesn't, and
> can't, guarantee that longjmping out of such a signal handler is safe.
> In some cases it may work, but its hard to guarantee correctness, GC or
> not.
>
> I believe that Java implementations that try to generate stack overflow
> exceptions usually handle this by always making sure that they encounter
> stack overflow exceptions at a known point. For example, they check at
> the beginning of each function that the function, including any native
> library code it invokes, has enough stack space to run to completion. This isn't
> entirely free, though it may be fairly cheap. It still doesn't strike me
> as 100% solid, since the libc API doesn't really include maximum stack
> depth bounds, so you have to determine those empirically, and hope libc
> doesn't change unexpectedly. And it's easy to miss a path through libc
> that has an unexpectedly deep call stack because something unexpected
> happened inside the library call.
>
> Even if it works, you still have the problem that Java code may have
> trouble dealing with the exception in unexpected places.
>
> Hans
>
> > -----Original Message-----
> > From: gc-bounces at linux.hpl.hp.com [mailto:gc-bounces at linux.hpl.hp.com]
> > On Behalf Of Petter Urkedal
> > Sent: Monday, May 21, 2012 12:17 AM
> > To: gc at linux.hpl.hp.com
> > Subject: Re: [Gc] Can sigaltstack be used in a GC registered thread?
> >
> > On 2012-05-21, Boehm, Hans wrote:
> > > AFAIK, the collector makes no attempt to handle a stack overflow. It
> > does make an attempt to invoke a preexisting SIGSEGV handler if one was
> > previously installed. It's conceivably possible, though no doubt
> > untested, to install a stack overflow handler that somehow maps
> > additional stack space and returns. I can't think of another approach
> > that would work with the current code structure. And I believe this is
> > a common problem for lots of system libraries. I believe you're also
> > out of luck if you generate a stack overflow while calling the libc
> > malloc.
> >
> > For some purposes, it's sufficient to be able to longjmp back to a good
> > point or raise an exception. E.g. I used libgc for a theorem prover
> > (unpublished), and while running though the TPTP suite, it would
> > occasionally cause a stack overflow, which I "handled" by skipping to
> > the next problem. The signal stack handler I used is here:
> > https://github.com/paurkedal/culibs/blob/master/cuflow/errors.c (Note:
> > I
> > should be calling the existing handler at the bottom of segv_handler.)
> > _______________________________________________
> > Gc mailing list
> > Gc at linux.hpl.hp.com
> > http://www.hpl.hp.com/hosted/linux/mail-archives/gc/
>
> _______________________________________________
> Gc mailing list
> Gc at linux.hpl.hp.com
> http://www.hpl.hp.com/hosted/linux/mail-archives/gc/
More information about the Gc
mailing list