<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Is this a safe assumption?<BR>
 <BR>
 <BR>
PROCEDURE ProcessOther (act: Activation;  p: PROCEDURE (start, stop: ADDRESS)) =<BR>...<BR>
    IF RTMachine.GetState # NIL THEN<BR>      (* process explicit state *)<BR>      sp := RTMachine.GetState(act.handle, state);<BR>    ELSE<BR>      (* assume registers are saved in suspended thread's stack *)<BR>      sp := act.sp;<BR>    END;<BR><BR>
 <BR>
As I understand..insert question marks a bunch here:<BR>
 <BR>
 <BR>
The threads are all sitting waiting in their signal handler, with a ucontext pointer...which could be in a register and not on the stack..which contains a pointer to the registers...which could be to a thread local..and not on the stack..and not in the Modula-3 heap..would be a simple matter to strengthen this..be sure to store the ucontext in a thread local (no, actually)..or somehow be sure to get it on the stack (might as well skip the ucontext and use the gregs or whatever is in it)? <BR>
Storing the ucontext in a thread local doesn't work, because you can't access thread locals that aren't yours. Instead a global array would likely be needed, that the signal handlers would all store into. I'd suggest, like, storing the ucontext/gregs into a local, or maybe a volatile local in C, maybe a struct/record, but I don't think there's any guaranteeing these aren't registers, I think a global array would be the way.<BR>
I guess the assumption is fairly safe, but I'm not 100% sure.<BR>
No, I'm not suspecting any problem here. I was just remembering that I'd seen platform specific stuff for some platforms (Darwin) that I'd managed to avoid, somehow, and went and looked closer, see if I was legitimately avoiding it. Most platforms do avoid it.<BR>
 <BR>
??<BR>
 <BR>
 <BR>
 - Jay<BR></body>
</html>