<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
"try" isn't supposed to save the signal mask, right?<br>I mean..like..finally doesn't restore it, right?<br>Nor does I suspect raise/except.<br><br><br>Specifically: Darwin.<br>There should be underscores in Target.m3 there?<br><br><br>Some of this /might/ be might fault.<br>In particular I was unaware of this signal mask thing and its relationship to setjmp/longjmp.<br><br><br>Furthermore, um... you know (or if you don't, I'll tell you):<br><br><br>Many platforms have two versions of setjmp/longjmp.<br>One saves/restore the signal mask. One does not.<br>Sometimes I think it is via some #define to "steer" /usr/include/setjmp.h.<br>Sometimes, I'm certain, it is setjmp vs. _setjmp, longjmp vs. _longjmp.<br><br>And then, furthermore, every system I've looked into recently except for NT<br>offers sigsetjmp/siglongjmp.<br>Their semantics when present are consistent.<br>Albeit less efficient.<br>sigsetjmp takes an extra integer (boolean) indicating of the signal mask should be saved.<br>They use sigjmp_buf instead of jmp_buf, which is sometimes identical, sometimes one or two integers larger, or possibly even larger, depending on the size of the signal mask.<br><br>So...for the cost of sometimes enlarging the jmpbuf, and for the cost of passing the extra integer 0, maybe we should use sigsetjmp on all Unix systems? I believe the Solaris documentation warns about the "less clearly named functions" (my wording) changing semantic..though I kind of doubt they can do that..<br><br><br>Not saving the signal mask is potentially much faster, as it might require a syscall to get.<br>(Though I also wonder if it can't be a special thread local, like at a fixed offset from FS or GS as NT does it.)<br><br><br>I'll go ahead and try just the smaller change of having Darwin use _setjmp instead of setjmp.<br>Not going ahead with sigsetjmp. Just yet.<br><br> - Jay<br>                                         </body>
</html>