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

Re: multiple crashes

From: Philip Martin <philip.martin_at_wandisco.com>
Date: Fri, 25 May 2012 09:54:13 +0100

Stefan Küng <tortoisesvn_at_gmail.com> writes:

> libsvn_tsvn32!svn_relpath_join+0x10
> libsvn_tsvn32!svn_wc__internal_get_origin+0x1b2
> libsvn_tsvn32!svn_client_commit5+0x14d3
> libsvn_tsvn32!svn_client__harvest_committables+0x26a
> libsvn_tsvn32!svn_client_commit5+0x2e4
>
> here the 'status' after svn_wc__db_scan_addition() is
> svn_wc__db_status_incomplete which might be an indication why
> original_repos_relpath is NULL and then causes the access violation in
> svn_relpath_join().

One way to get incomplete with status add is to interrupt a wc-to-wc
copy. That gives things like:

$ svn st wc
A + wc/X
! wc/X/B
! wc/X/f

But those have original_repos_relpath and the commit doesn't crash.

Is there some other way of getting incomplete with add? Perhaps an
interrupted merge?

The documentation for svn_wc__node_get_origin says that for an added
node (meaning not copied) the function returns NULL. This indicates
that callers are probably not going to crash if we return NULL for the
incomplete case:

svn diff ../src-1.7/subversion/libsvn_wc/node.c
Index: ../src-1.7/subversion/libsvn_wc/node.c
===================================================================
--- ../src-1.7/subversion/libsvn_wc/node.c (revision 1342275)
+++ ../src-1.7/subversion/libsvn_wc/node.c (working copy)
@@ -1407,7 +1407,10 @@
             return SVN_NO_ERROR; /* Local addition */
           }
 
- *repos_relpath = svn_relpath_join(
+ if (!original_repos_relpath)
+ *repos_relpath = NULL;
+ else
+ *repos_relpath = svn_relpath_join(
                                 original_repos_relpath,
                                 svn_dirent_skip_ancestor(op_root_abspath,
                                                          local_abspath),

I'd still like to be able to reproduce it.

>
> **********
>
> libsvn_tsvn32!svn_relpath_join+0x10
> libsvn_tsvn32!svn_wc__internal_get_origin+0x1b2
> libsvn_tsvn32!svn_client_diff_summarize_dup+0x56c
> libsvn_tsvn32!svn_client_export5+0x1bb
>
> no idea why here original_repos_relpath is NULL though. Maybe you have
> more luck analyzing that crash dump.

Does this mean you cannot determine status in the same way you
determined status above?

-- 
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com
Received on 2012-05-25 10:54:54 CEST

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