On Wed, Feb 24, 2010 at 7:10 PM, Philip Martin <philip.mar...@wandisco.com> wrote: > Johan Corveleyn <jcor...@gmail.com> writes: > >> Looking at the source code I see: >> - get_dir_contents calls read_representation >> - read_representation calls rep_read_get_baton, which creates a >> rep_read_baton and opens the rev file inside build_rep_list -> >> create_rep_state -> create_rep_state_body >> - read_representation wraps it in a stream, and sets the close >> function to rep_read_contents_close >> - get_dir_contents reads stuff and closes the stream >> >> Now, the close callback of the stream is rep_read_contents_close, which is: >> [[[ >> static svn_error_t * >> rep_read_contents_close(void *baton) >> { >> struct rep_read_baton *rb = baton; >> >> svn_pool_destroy(rb->pool); >> svn_pool_destroy(rb->filehandle_pool); >> >> return SVN_NO_ERROR; >> } >> ]]] >> >> Apparently, this does not close the file. After this callback is run, >> neither svn_io_file_close nor apr_file_close are being executed. > > You have the wrong function name. Look at apr_file_open in > > http://svn.apache.org/repos/asf/apr/apr/trunk/file_io/unix/open.c > > to see the pool cleanup handler, it's on the pool passed in (unless > the flag APR_FILE_NOCLEANUP is used), so that should be result_pool in > svn_stream_open_readonly which ends up being rb->pool. You should be > able to set a breakpoint on the function apr_unix_file_cleanup (or > file_cleanup on Windows) to catch the close.
Oh I see. Thanks for the explanation, Philip. Johan