Evgeny Kotkov wrote:
> Stefan Fuhrmann <stef...@apache.org> writes:
>> +static svn_error_t *
>> +get_phys_change_count(query_t *query,
>> +                      revision_info_t *revision_info,
>> +                      apr_pool_t *scratch_pool)
>>  {
>> +  apr_pool_t *subpool = svn_pool_create(scratch_pool);
[...]
>> +  svn_pool_destroy(subpool);
>> +  return SVN_NO_ERROR;
>>  }
> 
> What would be the reason to create a subpool here?  AFAIK, this is considered
> to be a bad practice, and there is a corresponding statement in the Subversion
> Community Guide [1]:
> 
>   Functions should not create/destroy pools for their operation; they should
>   use a pool provided by the caller. Again, the caller knows more about how 
> the
>   function will be used, how often, how many times, etc. thus, it should be in
>   charge of the function's memory usage.
> 
>   For example, the caller might know that the app will exit upon the 
> function's
>   return. Thus, the function would create extra work if it built/destroyed a
>   pool. Instead, it should use the passed-in pool, which the caller is going
>   to be tossing as part of app-exit anyway.

That "example" is spectacularly stupid -- the overhead would be insignificant.

Perhaps a better example is that of a caller calling the function many times in 
a tight loop, clearing the scratch pool on each iteration. Then the creation of 
an internal subpool is unnecessary and could be a significant overhead. Should 
we use that example instead in the community guide?

No comment on whether a sub-pool is useful in the particular cases you've 
noticed.

- Julian

Reply via email to