You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Stefan Küng <to...@gmail.com> on 2009/04/15 17:53:49 UTC

segfault during merge

Hi,

A strange one from a crashdump for TSVN:

file libsvn_ra\compat.c, line 802, function log_path_del_receiver():

  for (hi = apr_hash_first(pool, log_entry->changed_paths2);
       hi != NULL;
       hi = apr_hash_next(hi))
    {

The 'log_entry->changed_paths2' is NULL.
(changed_paths and revprops of log_entry are also NULL).

But I have no idea why there would be no changed paths in a revision?

Maybe the callstack might help?

 	TortoiseProc.exe!log_path_del_receiver(void * baton=0x01ddf8dc,
svn_log_entry_t * log_entry=0x02278af8, apr_pool_t * pool=0x02282868)
Line 801 + 0x17 bytes	C
>	TortoiseProc.exe!log_end_element(void * baton=0x01ddf814, int
state=237, const char * nspace=0x01ae57b0, const char * name=0x02177c90)
 Line 305 + 0x11 bytes	C
 	TortoiseProc.exe!wrapper_endelm_cb(void * baton=0x0227c818, int
state=237, const char * nspace=0x01ae57b0, const char * name=0x02177c90)
 Line 1070 + 0x16 bytes	C
 	TortoiseProc.exe!end_element(void * userdata=0x0218e978, const char *
name=0x0218c52a)  Line 391 + 0x16 bytes	C
 	TortoiseProc.exe!doContent(void * parser=0x0219a5bf, int
startTagLevel=0, const encoding * enc=0x00715600, const char *
s=0x0219a5bd, const char * end=0x0219a99a, const char * *
nextPtr=0x0146f220)  Line 1744 + 0xd bytes	C
 	TortoiseProc.exe!contentProcessor(void * parser=0x0146f208, const char
* start=0x0219a3d9, const char * end=0x0219a99a, const char * *
endPtr=0x0146f220)  Line 1354 + 0x22 bytes	C
 	TortoiseProc.exe!XML_ParseBuffer(void * parser=0x0146f208, int
len=1460, int isFinal=0)  Line 1156 + 0x38 bytes	C
 	TortoiseProc.exe!XML_Parse(void * parser=0x0146f208, const char *
s=0x02280758, int len=1460, int isFinal=0)  Line 1145 + 0xc bytes	C
 	TortoiseProc.exe!ne_xml_parse(ne_xml_parser_s * p=0x0218e978, const
char * block=0x02280758, unsigned int len=1460)  Line 546 + 0xc bytes	C
 	TortoiseProc.exe!cancellation_callback(void * userdata=0x02279480,
const char * block=0x02280758, unsigned int len=1460)  Line 1149 +
0x12 bytes	C
 	TortoiseProc.exe!ne_read_response_block(ne_request_s * req=0x02280730,
char * buffer=0x02280758, unsigned int buflen=1460)  Line 790 + 0x10 bytes	C
 	TortoiseProc.exe!ne_request_dispatch(ne_request_s * req=0x02280730)
Line 1377 + 0x13 bytes	C
 	TortoiseProc.exe!svn_ra_neon__request_dispatch(int *
code_p=0x00000000, svn_ra_neon__request_t * req=0x0227c778, apr_hash_t *
extra_headers=0x00000000, const char * body=0x022789c0, int okay_1=200,
int okay_2=0, apr_pool_t * pool=0x02276720)  Line 1451	C
 	TortoiseProc.exe!parsed_request(svn_ra_neon__request_t *
req=0x00000000, svn_ra_neon__session_t * ras=0x01450528, const char *
method=0x00717444, const char * url=0x02279438, const char *
body=0x022789c0, apr_file_t * body_file=0x00000000, void
(ne_xml_parser_s *, void *)* set_parser=0x00000000, svn_error_t * (int
*, void *, int, const char *, const char *, const char * *)*
startelm_cb=0x005c9bb0, svn_error_t * (void *, int, const char *,
unsigned int)* cdata_cb=0x005cfd10, svn_error_t * (void *, int, const
char *, const char *)* endelm_cb=0x005c9de0, void * baton=0x01ddf814,
apr_hash_t * extra_headers=0x00000000, int * status_code=0x00000000, int
spool_response=0, apr_pool_t * pool=0x02276720)  Line 1234 + 0x58 bytes	C
 	TortoiseProc.exe!svn_ra_neon__parsed_request(svn_ra_neon__session_t *
sess=0x01450528, const char * method=0x00717444, const char *
url=0x02279438, const char * body=0x022789c0, apr_file_t *
body_file=0x00000000, void (ne_xml_parser_s *, void *)*
set_parser=0x00000000, svn_error_t * (int *, void *, int, const char *,
const char *, const char * *)* startelm_cb=0x005c9bb0, svn_error_t *
(void *, int, const char *, unsigned int)* cdata_cb=0x005cfd10,
svn_error_t * (void *, int, const char *, const char *)*
endelm_cb=0x005c9de0, void * baton=0x01ddf814, apr_hash_t *
extra_headers=0x00000000, int * status_code=0x00000000, int
spool_response=0, apr_pool_t * pool=0x02276720)  Line 1293	C
 	TortoiseProc.exe!svn_ra_neon__get_log(svn_ra_session_t *
session=0x01450470, const apr_array_header_t * paths=0x00000000, long
start=68814, long end=70347, int limit=0, int discover_changed_paths=0,
int strict_node_history=1, int include_merged_revisions=0, const
apr_array_header_t * revprops=0x02278870, svn_error_t * (void *,
svn_log_entry_t *, apr_pool_t *)* receiver=0x0053ad90, void *
receiver_baton=0x01ddf8dc, apr_pool_t * pool=0x02276720)  Line 508 +
0x2a bytes	C
 	TortoiseProc.exe!svn_ra_get_log2(svn_ra_session_t *
session=0x01450470, const apr_array_header_t * paths=0x00000000, long
start=68814, long end=70347, int limit=0, int discover_changed_paths=1,
int strict_node_history=1, int include_merged_revisions=0, const
apr_array_header_t * revprops=0x02278870, svn_error_t * (void *,
svn_log_entry_t *, apr_pool_t *)* receiver=0x0053ad90, void *
receiver_baton=0x01ddf8dc, apr_pool_t * pool=0x02276720)  Line 769 +
0x33 bytes	C
 	TortoiseProc.exe!svn_ra__get_deleted_rev_from_log(svn_ra_session_t *
session=0x01450470, const char * rel_deleted_path=0x02278638, long
peg_revision=68814, long end_revision=70347, long *
revision_deleted=0x01ddf964, apr_pool_t * pool=0x02276720)  Line 860 +
0x39 bytes	C
 	TortoiseProc.exe!svn_ra_get_deleted_rev(svn_ra_session_t *
session=0x01450470, const char * path=0x022767d0, long
peg_revision=68814, long end_revision=70347, long *
revision_deleted=0x01ddf964, apr_pool_t * pool=0x02276720)  Line 1079 +
0x13 bytes	C

TortoiseProc.exe!adjust_deleted_subtree_ranges(svn_client__merge_path_t
* child=0x013bb5b0, svn_client__merge_path_t * parent=0x013bb420, const
char * mergeinfo_path=0x00594cb7, long revision1=-1, long revision2=0,
const char * primary_url=0x02194f58, svn_ra_session_t *
ra_session=0x00000000, svn_client_ctx_t * ctx=0x013dcb20, apr_pool_t *
pool=0x01447030)  Line 2546 + 0x12 bytes	C
 	TortoiseProc.exe!calculate_remaining_ranges(svn_client__merge_path_t *
parent=0x013bb420, svn_client__merge_path_t * child=0x013bb5b0, const
char * source_root_url=0x01448a68, const char * url1=0x02194f58, long
revision1=0, const char * url2=0x00000000, long revision2=0, apr_hash_t
* target_mergeinfo=0x02267940, apr_hash_t *
implicit_mergeinfo=0x02258bd8, int is_subtree=1, svn_ra_session_t *
ra_session=0x01450470, const svn_wc_entry_t * entry=0x013cbc00,
svn_client_ctx_t * ctx=0x013dcb20, apr_pool_t * pool=0x01447030)  Line
2943 + 0x1d bytes	C
 	TortoiseProc.exe!populate_remaining_ranges(apr_array_header_t *
children_with_mergeinfo=0x01447d20, const char *
source_root_url=0x01448a68, const char * url1=0x01450368, long
revision1=70347, const char * url2=0x014502c0, long revision2=68814, int
inheritable=1, int honor_mergeinfo=1, svn_ra_session_t *
ra_session=0x01450470, const char *
parent_merge_src_canon_path=0x0059818b, svn_wc_adm_access_t *
adm_access=0x013ebd18, merge_cmd_baton_t * merge_b=0x01ddfb18)  Line
3284 + 0x47 bytes	C
 	TortoiseProc.exe!do_directory_merge(const char * url1=0x01450368, long
revision1=70347, const char * url2=0x014502c0, long revision2=68814,
const svn_wc_entry_t * target_entry=0x013ebdc8, svn_wc_adm_access_t *
adm_access=0x013ebd18, svn_depth_t depth=svn_depth_infinity,
notification_receiver_baton_t * notify_b=0x00000001, merge_cmd_baton_t *
merge_b=0x01ddfb18, apr_pool_t * pool=0x01447030)  Line 6019 + 0x2f bytes	C
 	TortoiseProc.exe!do_merge(apr_array_header_t *
merge_sources=0x0144f4c8, const char * target=0x0218c068, const
svn_wc_entry_t * target_entry=0x013ebdc8, svn_wc_adm_access_t *
adm_access=0x013ebd18, int sources_ancestral=1, int sources_related=1,
int same_repos=1, int ignore_ancestry=0, int force=1, int dry_run=0, int
record_only=0, svn_depth_t depth=svn_depth_infinity, const
apr_array_header_t * merge_options=0x01440060, int *
use_sleep=0x01ddfc24, svn_client_ctx_t * ctx=0x013dcb20, apr_pool_t *
pool=0x01440020)  Line 6689 + 0x34 bytes	C
 	TortoiseProc.exe!svn_client_merge_peg3(const char * source=0x0218c658,
const apr_array_header_t * ranges_to_merge=0x013ebd18, const
svn_opt_revision_t * peg_revision=0x0012c764, const char *
target_wcpath=0x0218c068, svn_depth_t depth=-2, int ignore_ancestry=0,
int force=1, int record_only=0, int dry_run=0, const apr_array_header_t
* merge_options=0x01440060, svn_client_ctx_t * ctx=0x013dcb20,
apr_pool_t * pool=0x01440020)  Line 8058 + 0x43 bytes	C



Stefan

-- 
       ___
  oo  // \\      "De Chelonian Mobile"
 (_,\/ \_/ \     TortoiseSVN
   \ \_/_\_/>    The coolest Interface to (Sub)Version Control
   /_/   \_\     http://tortoisesvn.net

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1730622

Re: segfault during merge

Posted by Lieven Govaerts <sv...@mobsol.be>.
On 04/15/2009 07:53 PM, Stefan Küng wrote:
> Hi,
>
> A strange one from a crashdump for TSVN:
>
> file libsvn_ra\compat.c, line 802, function log_path_del_receiver():
>
>    for (hi = apr_hash_first(pool, log_entry->changed_paths2);
>         hi != NULL;
>         hi = apr_hash_next(hi))
>      {
>
> The 'log_entry->changed_paths2' is NULL.
> (changed_paths and revprops of log_entry are also NULL).
>
> But I have no idea why there would be no changed paths in a revision?

Because the revision is empty, or it contains paths that aren't readable.

> Maybe the callstack might help?
>
>   	TortoiseProc.exe!log_path_del_receiver(void * baton=0x01ddf8dc,
> svn_log_entry_t * log_entry=0x02278af8, apr_pool_t * pool=0x02282868)
> Line 801 + 0x17 bytes	C

This code is only used with server version < 1.6. It's missing the check 
for empty paths list.

Fixed in r37363 and proposed for backport to the 1.6.x branch.

Thanks for the report

Lieven

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1807927