At Wed, 16 Dec 2015 12:15:50 -0800 (PST), Kyle Hale wrote:
> I can give more context if necessary, but briefly, the issue I'm having is 
> a strange one with memory corruption in the GC's memory management code, 
> and I suspect the cause might be coming from an interplay with signals. 
> When racket is running in the specialized OS kernel, we forward any page 
> fault that occurs over to a user-space thread on a Linux core, which 
> recreates the memory reference, forcing Linux to handle it for us. 

My guess is that you're seeing an issue with thread-local variables, as
opposed to the stack. Does disabling places and futures (with
`configure --disable-places --disabled-futures`) change anything?


> The issue with this is that if racket is *expecting* references to invalid 
> pages, e.g. for some kind of lazy allocation, the signal handler (for 
> SIGSEGV) is going to run in a different thread, on a different core, and 
> with a different stack. [...]

That should be fine.

> So my question is this: is racket expecting to catch SIGSEGV to fix up 
> memory regions or something similar, or is it going to be doing any clever 
> magic with something like setjmp() and longjmp()?

No. In fact, we use sigaltstack() on Linux, and the write barrier works
at the level of Mach messages on Mac OS X --- so it's a common mode for
signals to be handled on a different stack than the one for the
faulting thread.

In the case of Mac OS X, the garbage collector must specifically
arrange for the message-handling thread to see the thread-local
variables of the main thread. My guess is that you'll need to do
something similar, but thread-local variables are used only when places
or futures are enabled, so that's why I asked about disabling them.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-dev/20151216203731.648CF65005E%40mail-svr1.cs.utah.edu.
For more options, visit https://groups.google.com/d/optout.

Reply via email to