Greg Hudson <ghudson@MIT.EDU> wrote on 04/05/2005 11:39:49 AM:
> On Tue, 2005-04-05 at 11:27, Mark Phippard wrote:
> > I think it is possible that this could effect the OS/400 port, but I
am
> > not sure how I could tell. OS/400 is Unix-like and supports POSIX,
but it
> > does not support fork(). svnserve runs multi-threaded and does not
spawn
> > any additional processes. Would this mean that we would be exposed to
> > this sort of error? If so, how would it manifest?
>
> The problem would manifest when two commits happening within the same
> process are finalized at the same time. (Finalization begins when the
> client has finished transmitting all of its data. At this point, all
> the file deltas have already been computed and the transaction has been
> auto-merged against the head if necessary. The finalization process is:
> grab the write lock, choose a new revision number, marshal the changed
> directory data into the new proto-rev file, and move the new rev file
> into place.) It's hard to say exactly what would go wrong, but most
> likely one of the commits would be obliterated by the other.
What would be the easiest way to try to create the problem to see if it
happens? Just get a bunch of people to commit at the same time?
I read the docs for fcntl() on OS/400 and it definitely seems to indicate
the lock is for the process, not the thread. Does the code specifically
use fcntl() or does it use an APR routine that possibly the OS/400 port
implemented with a per-thread lock?
Thanks
Mark
_____________________________________________________________________________
Scanned for SoftLanding Systems, Inc. by IBM Email Security Management Services powered by MessageLabs.
_____________________________________________________________________________
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Apr 5 17:48:51 2005