This is a rough manual trace of what occurs on a PROPFIND request.

Location of file: M == mod_dav, S == mod_dav_svn

dav_method_propfind [ M:mod_dav.c ]
dav_svn_walk [ S:repos.c ]
dav_svn_do_walk [ S:repos.c ]
  ** may recursively call dav_svn_do_walk for children as depth dictates
  - dav_propfind_walker [ M:mod_dav.c ]
    - dav_open_propdb [ M:props.c ]
      ** sets propdb->p to r->pool
      - dav_svn_db_open [ S:deadprops.c ]
        ** creates db->p
    - dav_get_props [ M:props.c ]
      ** Uses propdb->p.
      ** Appends response to propdb->p
      - may call dav_find_liveprop [ M:props.c ]
        - dav_svn_find_liveprop [ S:liveprops.c ]
          - dav_do_find_liveprop [ M:liveprop.c ]
            ** static storage 
      - dav_insert_liveprop [ M:props.c ]
        - dav_svn_insert_prop [ S:liveprops.c ]
          ** uses resource->info->pool to svn_fs_*
          ** places result in resource->pool
      - dav_svn_db_output_value [ S:deadprops.c ]
        ** uses db->resource->pool
        - get_value [ S:deadprops.c ]
          ** Uses db->p
      - dav_svn_db_define_namespaces [ S:deadprops.c ]
        - calls dav_xmlsns_add with constant storage space.
        - Must live as long as xi->prefix_uri/xi->uri_prefix
          ** Uses propdb->p
    - dav_get_allprops [ M:props.c ]
      ** Uses propdb->p
      - dav_run_insert_all_liveprops [ M:hook ]
        - dav_svn_insert_all_liveprops [ S:liveprops.c ]
          ** Uses resource->info->pool
          - dav_svn_insert_prop [ see above ]
            ** resource->info->pool tweaked to be a temp subpool
    - dav_close_propdb [ M:props.c ]
      - dav_svn_db_close [ S:deadprops.c ]
         ** destroys db->p
    - dav_add_response [ M:mod_dav.c ]
      ** uses wres->pool to store response
