Ok, not so critical i hope. (If the calling functions doesn't looping then)
Here is another example from svnsync's main.c:
pool = svn_pool_create(NULL);
err = svn_ra_initialize(pool);
if (err)
{
svn_handle_error2(err, stderr, FALSE, "svnsync: ");
// no destoy here either?
return EXIT_FAILURE;
}
....
//
if (err)
{
/* Fix up stupid default error strings. */
if (err->apr_err == SVN_ERR_CL_INSUFFICIENT_ARGS)
{
svn_error_clear(err);
err = svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, NULL,
_("Not enough arguments provided; "
"try 'svnsync help' for more info"));
}
svn_handle_error2(err, stderr, FALSE, "svnsync: ");
svn_error_clear(err);
// no destoy here
return EXIT_FAILURE;
}
.....
On 10/13/06, Peter Lundblad <plundblad@google.com> wrote:
>
> Asbjørn Pettersen writes:
> > I'm a little confused by the use of the svn_pool_create() and
> > svn_pool_destroy() functions.
> > The svn_pool_destroy() isn't always called !? especially on "subpools".
> > The SVN_ERR() also return without calling destroy()
> >
> >
> > Example:
> > subversion/subversion/libsvn_client/checkout.c
> >
> > svn_client__checkout_internal()
> > {
> > // ....
> > apr_pool_t *session_pool = svn_pool_create(pool);
> >
> > /* Get the RA connection. */
> > SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum,
> > &session_url, url,
> > peg_revision, revision,
> ctx,
> > session_pool));
> >
> > SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, pool));
> > if (kind == svn_node_none)
> > // ------------- Why not a call destroy() here ?
> > // svn_pool_destroy(session_pool);
>
> Because the parent pool will destroy the subpool eventually, and in the
> error case, this is expected to happen quite soon. This avoids code
> cluttering a lot. There's some information of pool usage in hacking.
>
> Regards,
> //Peter
>
Received on Fri Oct 13 21:44:41 2006