<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
We fixed it a long time ago.<br>The problem was:<br><br><br>Usually fork() is followed very soon by exec().<br>i.e. the way Posix programs (processes) often run sub-programs (processes) is via fork and exec.<br>This is ok. No problem.<br><br><br>However there is another pattern of use of fork where "servers" call fork for each "client".<br>They don't exec.<br><br><br>It is something like creating a thread. Except that everything is read-only/copy-on-write, not really shared.<br><br><br>This is useful if servers have an expensive initialization, and don't need to share per-client.<br><br><br>Cvsup does that.<br><br><br>When fork is not followed by exec, whatever Modula-3 user threads existed in the "parent" process, still<br>exist in the "child" process.<br>The same is NOT true with pthreads.<br><br><br>cvsup depended on the threads all surviving fork.<br><br><br>We fixed cvsup to recreate its threads in the child process, and to fix user threads to NOT have threads<br>survive fork, except the one calling fork.<br><br><br>This highlighted other problems -- the existance of and possible need to use pthread_atfork.<br><br>I'm not really explaining it all, but mostly.<br>Look up pthread_atfork.<br><br> - Jay<br><br><br><div><div id="SkyDrivePlaceholder"></div>> Date: Sun, 29 Apr 2012 17:11:36 -0400<br>> From: hendrik@topoi.pooq.com<br>> To: m3devel@elegosoft.com<br>> Subject: Re: [M3devel] swaping user threads for kernel threads w/o rebuilding everything?<br>> <br>> On Sun, Apr 29, 2012 at 06:40:51PM +0100, Daniel Alejandro Benavides D. wrote:<br>> > (see for example cvsup), cvsup has strong reliance on network idle <br>> > times<br>> <br>> Speaking of cvsup, I seem to remember it stopped working, perhaps <br>> because of thread implementatino problems.  Is it back in order yet?<br>> <br>> -- hendrik<br></div>                                       </div></body>
</html>