[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: nasty commit bug

From: Philip Martin <philip_at_codematters.co.uk>
Date: 2002-07-15 18:06:28 CEST

Kevin Pilch-Bisson <kevin@pilch-bisson.net> writes:

Didn't see this when I commented on issue 792.

> Okay I'm home, and I have some more info to pass along.
>
> 1. I actually had 2 segfaults after commits today. The first one didn't
> seem to have an affect on the commit.
>
> 2. My guess is that the first segfault is the cause of the problem, exactly
> as Ben described elsewhere. entries file thinks its at the new rev, but
> text-base isn't.
>
> 3. For reference, here is part of my 'history' output with commentary.
>
> 664 svn ci -F log include/svn_wc.h include/svn_error_codes.h
> libsvn_wc/props.c libsvn_client/prop_commands.c
> *** I CTRL-C'd this for some reason before any output.

This locked the libsvn_wc directory which is at rev 2471. The lock
file is timed about 20 minutes before rev 2485. Interrupting means
that the lock didn't get cleared.

> 665 cat log
> 666 svn ci -F log include/svn_wc.h include/svn_error_codes.h
> libsvn_wc/props.c libsvn_client/prop_commands.c
> *** This segfaulted, but created a valid new revision.

The existing lock prevented the client locking libsvn_wc but that
failure was ignored. Revision 2485 was created on the server. The
client attempted to use the missing lock and segfaulted. Thus the
working copy remains at rev 2471 and libsvn_wc/props.c remains in
state M. The segfault didn't occur until after include/ had been
updated, so in the working copy svn_wc.h and svn_error_codes.h change
to rev 2485.

> 667 ls
> 668 gdb core
> *** I had ulimit -c set to zero.
> 669 ls
> 670 svn ci -F log include/svn_wc.h include/svn_error_codes.h
> libsvn_wc/props.c libsvn_client/prop_commands.c
> *** This did nothing, because svn thought I had finished the commit.

Odd. I would have expected it to try the commit again,
libsvn_wc/props.c and libsvn_client/prop_commands.c are still in state
M. It would not send svn_wc.h or svn_error_codes.h because they are
at rev 2485 and are not modified, but it would send props.c. I would
expect the server to give either a merge error or a transaction out of
date error. The client would once again fail to lock libsvn_wc
because the original lock remains, but would ignore the problem.
Since the server rejects the commit the client will not
attemptpost-commit processing and will not segfault.

> 671 cd clients/cmdline/
> 672 vi main.c
> 673 cd ../
> 674 cd ..
> 675 vi libsvn_wc/props.c
> 676 vi libsvn_client/prop_commands.c
> 677 vi log
> 678 vi log
> 679 svn ci -F log clients/cmdline/main.c libsvn_wc/props.c
> *** I CTRL-C'd this to set ulimit in case it segfaulted again.

If not interrupted I would have expected this to try to commit
libsvn_wc/props.c and for the server to reject it.

> 680 man ulimit
> 681 man 1 ulimit
> 682 man 2 ulimit
> 683 man 4 ulimit
> 684 man 5 ulimit
> 685 man 6 ulimit
> 686 man 7 ulimit
> 687 man 8 ulimit
> *** Me trying to figure out how to set ulimit (and not finding a manpage).
> 688 ulimit -a
> 689 ulimit -c unlimited
> *** Me guessing
> 690 ulimit -a
> 691 svn ci -F log clients/cmdline/main.c libsvn_wc/props.c
> *** This is the bogus commit

I would have expected this to try to commit libsvn_wc/props.c and for
the server to reject it. The working copy is still rev 2471 and yet
rev 2485 exists on the server. Somehow it succeeds?!? It then
segfaults in the post-commit processing because it failed to lock
libsvn_wc, but ignored the error and then tried to use the missing
lock.

Looking at the tar file, props.c is at rev 2471, and the text-base is
correct for that revision. So why didn't the server reject the
commit?

-- 
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Mon Jul 15 18:07:21 2002

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.