Actions:
|
2013-03-28 17:28 AEST by Arthur Barrett - If the server runs out of memory, eg: during a commit of a 'removed' file on a branch, then the server pay
be left with an RCS lock on the file/branch and also a 'deadlock' on the branch.
The deadlock can be cleared by restarting the lock server
The RCS lock can be cleared with the 'cvs admin -l' command |
|
2013-03-28 17:35 AEST by Arthur Barrett - In theory this can happen on any platform, but it's most likely to occur on windows.
It's not very easy to fix, maybe impossible.
In subr.cpp the xxrealloc() function is most likely to 'cause' this - it will call exit() under these conditions.
It's almost impossible to fix, for three reasons:
1) there is no memory available to re-read the RCS file and unlock it
2) the RCS buffer is probably corrupt, so the RCS file cannot be 'unlocked' and 'rewritten'
3) CVSNT is designed to fail under these conditions - the fail is not elegant but prevents further damage
The only ways I can see to 'fix' this:
- better 'automatic unlock' support when a client connection is disconnected in lockservice
- not RCS_rewrite after RCS_Lock in remove_file() of commit.cpp - see comments in lock_RCS() also in
commit.cpp - just need to check that the lockservice is suitably preventing access to the RCS file at this
point.
Neither of these changes is minor enough to accomodate in a patch. |