<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
I propose that RTProcess__RegisterForkHandlers be implemented at least 3 times:<br><br><br>no-op for Win32:<br>  just return 0<br>  It is tempting to have this assert(0) but that is wrong.<br>  The function will be called and should just do nothing.<br><br>  <br>as-is for pthread:<br>  call pthread_atfork<br>  <br>manually for userthreads:<br><br>FreeBSD < 6: does it have pthreads?<br>Can we declare such systems use user threads?<br><br><br>take a lock, maintain the three lists/growable arrays, whatever<br>probably implement it in Modula-3<br><br><br>VMS: Punt for now.<br>Maybe newer versions than I was using have it.<br><br><br>And then, introduce RTProcess__Fork.<br>Replace all calls to Unix.fork with it.<br>Also implemented around 3 times.<br><br><br>RTProcessWin32__Fork: assert(false)<br> fork+exec must be implemented through higher level operations<br> fork+do more work isn't possible<br><br><br>RTProcessPthread__Fork: return fork();<br><br>RTProcessUserThreads__Fork: wrapper around fork()<br>that handles the callbacks from RTProcess__RegisterForkHandlers.<br><br>RTProcessVms__Fork: assert(false) I think, unless newer VMS has fork().<br><br><br>One thing not stated here, is that I believe something "like"<br>pthread_atfork is somewhere between reasonable and actually needed,<br>on all Posix/Unix systems.<br><br>Because, what isn't well known here, but I think is true, is that<br>we depend on pthread_atfork (or a reimplementation thereof)<br>as described here, so that fork + do more work with user threads<br>behaves like pthreads, and doesn't have all the threads survive.<br><br>Or..and I assume the answer is no: Do we want fork + do more work<br>to keep all threads for user threads and keep only one thread for pthreads?<br>How it was for a long time, but we didn't discover until fairly<br>recently.<br><br>I'm 99% sure this is all exactly correct.<br>Possibly this is enough explanation for others to do it.<br>Otherwise, maybe I'll get to it "soon". Maybe.<br><br><br>This doesn't help us figure out what is wrong with our pthreads implementation.<br>It just makes user threads not require -pthread.<br><br><br> - Jay                                          </body>
</html>