[M3devel] cvsup
Dragiša Durić
dragisha at m3w.org
Thu Mar 18 13:56:11 CET 2010
Client, it's what I am using. And it's dead as we speak.
Last worked before I pulled/built RC4
On Thu, 2010-03-18 at 10:09 +0000, Jay K wrote:
> Dragisha, Really? The server? With the -C flag and/or -f?
>
> Evidence is very very very very very good as to what is going on here.
> It is all related to "fork1" vs. "forkall".
> fork1 is the overwhelming usual behavior (Solaris has an option),
> and basically *any* library that uses pthreads is obligated to use
> pthread_atfork, be it a C library or the Modula-3 library, etc..
>
> The application cannot do things, unless
> the library exposes its internal locks. The Posix spec for
> pthread_atfork explains the problem.
>
> Consider C code that links in Modula-3 code.
> C code is fairly free to use the fork + do work model. It isn't very
> common,
> but it does exist, and people have gone to extra length to keep it
> viable.
> bash and ccache I believe both use this model.
>
>
> Granted, if you had your own kernel thread implementation, it might
> have addressed this.
>
>
> I have a version now that has served over 1000 requests, similar to
> what I sent, but a bit reduced. The main change was I just called
> pthread_mutex_lock/unlock over the locks in ThreadPThread.m3, instead
> of using SuspendOthers. Haven't tested on Solaris/Darwin yet, just
> Linux. This version also doesn't expose the ForkProcessAndAllThreads
> functions.
> The client has to restart its threads, or in the cvsupd case, don't
> depend on the dispatcher thread to survive fork.
> I want to still try out the "bigger" change, but with the simpler
> lock/unlock.
> And test on Solaris and Darwin.
>
>
> I think for SuspendOthers to not work is not surprising.
> The threads can still hold a few locks even if suspended, I'm pretty
> sure.
> The point is to fork in a "controlled" fashion -- all locks held, and
> in
> the right order, so that both parent and child can release them.
>
>
> Taking "all" the locks in Prepare is more reliable.
>
>
> I do wonder if really "all" locks need to be taken.
> I only take the static ones declared in PThreadThread.c.
>
> - Jay
>
>
> > Subject: Re: [M3devel] cvsup
> > From: dragisha at m3w.org
> > To: jay.krell at cornell.edu
> > CC: hosking at cs.purdue.edu; m3devel at elegosoft.com
> > Date: Wed, 17 Mar 2010 13:29:43 +0100
> >
> > Yes, I can. I am building it regularly, from version to version, at
> > least few times a year. And it also worked with my ancient kernel
> thread
> > implementation. Was one of stress tests.
> >
> > On Tue, 2010-03-16 at 16:10 +0000, Jay K wrote:
> > >
> > > (Can anyone claim to have seen cvsup server work with kernel
> threads?)
> > --
> > Dragiša Durić <dragisha at m3w.org>
> >
--
Dragiša Durić <dragisha at m3w.org>
More information about the M3devel
mailing list