Stefan Fuhrmann wrote on Mon, Apr 05, 2021 at 21:17:23 +0200: > +++ status.c (working copy) > @@ -1123,15 +1288,15 @@ > if (depth == svn_depth_infinity > && info->has_descendants /* is dir, or was dir and tc descendants > */) > { > - SVN_ERR(get_dir_status(wb, local_abspath, TRUE, > - dir_repos_root_url, dir_repos_relpath, > - dir_repos_uuid, info, > - dirent, ignore_patterns, > - svn_depth_infinity, get_all, > - no_ignore, > - status_func, status_baton, > - cancel_func, cancel_baton, > - scratch_pool)); > + SVN_ERR(wb->dir_status_func(wb, local_abspath, TRUE, > + dir_repos_root_url, dir_repos_relpath, > + dir_repos_uuid, info, > + dirent, ignore_patterns, > + svn_depth_infinity, get_all, > + no_ignore, > + status_func, status_baton, > + cancel_func, cancel_baton, > + scratch_pool));
It's unusual for a call to wb->dir_status_func not to pass wb->dir_status_baton. Here are the callsites: > @@ -2644,6 +3138,8 @@ > + wb.dir_status_func = get_dir_status; > + wb.dir_status_baton = NULL; This callsite doesn't care about the baton. > +static svn_error_t * > +get_dir_status_process(void **result, > + svn_task__t *task, > + void *thread_context, > + void *process_baton, > + svn_cancel_func_t cancel_func, > + void *cancel_baton, > + apr_pool_t *result_pool, > + apr_pool_t *scratch_pool) > +{ ⋮ > + wb->dir_status_func = create_dir_status_task; > + wb->dir_status_baton = &status_baton; > + > + SVN_ERR(get_dir_status(wb, baton->local_abspath, ⋮ > + add_status_result, > + &status_baton, > + cancel_func, > + cancel_baton, > + scratch_pool)); This callsite doesn't care about wb->dir_status_baton not being passed, because wb itself is passed. Furthermore, the value of the baton is also passed as add_status_result's baton. So, I'm guessing it all works, but it's not the func/baton pattern the struct member names imply it to be. Cheers, Daniel > +}