[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