On 28.12.2018 11:05, Bert Huijben wrote: > +svn_error_t * > +svn_error__malfunction_f(svn_boolean_t can_return, > + const char *file, int line, > + const char *fmt, ...) > +{ > + apr_pool_t *pool = svn_pool_create(NULL); > + va_list ap; > + const char *expr; > + > + va_start(ap, fmt); > + expr = apr_pvsprintf(pool, fmt, ap); > + va_end(ap); > + return malfunction_handler(can_return, file, line, expr); > +} > + > > Can we somehow use a smarter pool (perhaps just require passing an existing > scratch pool as some similar apr apis do). Some library users do use the > can_return feature and/or exception handling and we would introduce a minor > memory leak.
We'd have to somehow tweak the malfunction_handler to create its own svn_error_t* from the provided pool. Another option is to check if can_return is set, and only then, call the malfunction_handler first and then change the message stored in the returned svn_error_t, using the error pool for formatting. -- Brane