[prev in list] [next in list] [prev in thread] [next in thread]
List: subversion-issues
Subject: [Issue 4068] mod_dav_svn service stopped working with
From: shlomif () tigris ! org
Date: 2011-11-25 17:40:02
Message-ID: 20111125174002.DF48154009A () sc157-tigr ! sjc ! collab ! net
[Download RAW message or body]
http://subversion.tigris.org/issues/show_bug.cgi?id=4068
------- Additional comments from shlomif@tigris.org Fri Nov 25 09:40:02 -0800 2011 -------
OK, gdb says the process hangs in:
[GDB]
(gdb) bt
#0 request_body_to_string (pool=0x70e898, r=0x70e910,
request_str=<optimized out>) at subversion/mod_dav_svn/util.c:725
#1 dav_svn__parse_request_skel (skel=0x7fffffffcee8, r=0x70e910,
pool=0x70e898) at subversion/mod_dav_svn/util.c:784
#2 0x00007ffff64ec7a7 in handle_post_request (output=0x70fd38,
resource=0x7374c0, r=0x70e910) at subversion/mod_dav_svn/repos.c:4409
#3 dav_svn__method_post (r=0x70e910) at subversion/mod_dav_svn/repos.c:4450
#4 0x000000000043c468 in ap_run_handler ()
#5 0x000000000043caac in ap_invoke_handler ()
#6 0x000000000044c300 in ap_process_request ()
#7 0x0000000000448de0 in ?? ()
#8 0x0000000000443d38 in ap_run_process_connection ()
#9 0x00000000004517fb in ?? ()
#10 0x0000000000451af0 in ?? ()
#11 0x00000000004522be in ap_mpm_run ()
#12 0x0000000000423c1a in main ()
(gdb)
[/GDB]
A line-by-line-trace shows:
(gdb) n
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb) n
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb) n
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb) n
756 apr_brigade_cleanup(brigade);
(gdb) n
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb) n
720 if (status != APR_SUCCESS)
(gdb) n
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb) n
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb) n
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb) n
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb)
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb)
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb)
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb)
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb)
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb)
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
(gdb)
725 bucket = APR_BUCKET_NEXT(bucket))
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
756 apr_brigade_cleanup(brigade);
(gdb)
718 status = ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES,
(gdb)
720 if (status != APR_SUCCESS)
(gdb)
723 for (bucket = APR_BRIGADE_FIRST(brigade);
(gdb)
730 if (APR_BUCKET_IS_EOS(bucket))
(gdb)
736 if (APR_BUCKET_IS_METADATA(bucket))
Furthremore, I detected a circular loop in the bucket:
(gdb) print bucket[0].next
There is no member named next.
(gdb) print bucket[0].link
$6 = {next = 0x737a10, prev = 0x737a10}
(gdb) print bucket[0].link.next
$7 = (struct apr_bucket * volatile) 0x737a10
(gdb) print bucket[0].link.next[0]
$8 = {link = {next = 0x7088a8, prev = 0x7088a8}, type = 0x708868, length = 0,
start = 0, data = 0x0, free = 0x100000001, list = 0x0}
(gdb) print bucket[0].link.next[0].link.next[0]
$9 = {link = {next = 0x737a10, prev = 0x737a10}, type = 0x66bda0, length = 0,
start = 0, data = 0x0, free = 0x421280 <apr_bucket_free@plt>,
list = 0x708868}
(gdb) print bucket[0].link.next[0].link.next[0].link.next[0]
$10 = {link = {next = 0x7088a8, prev = 0x7088a8}, type = 0x708868, length = 0,
start = 0, data = 0x0, free = 0x100000001, list = 0x0}
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=463&dsMessageId=2887170
To unsubscribe from this discussion, e-mail: [issues-unsubscribe@subversion.tigris.org].
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic