The FS loader uses a vtable fs_library_vtable_t defined in fs-loader.h. Some of the functions defined in the vtable have a common_pool parameter:
/* The open_fs/create/open_fs_for_recovery/upgrade_fs functions are serialized so that they may use the common_pool parameter to allocate fs-global objects such as the bdb env cache. */ svn_error_t *(*create)(svn_fs_t *fs, const char *path, apr_pool_t *pool, apr_pool_t *common_pool); svn_error_t *(*open_fs)(svn_fs_t *fs, const char *path, apr_pool_t *pool, apr_pool_t *common_pool); In FSFS this common_pool gets passed to fs_serialized_init in fs.c where it is used to setup setup mutexes: status = apr_pool_userdata_get(&val, key, common_pool); if (status) return svn_error_wrap_apr(status, _("Can't fetch FSFS shared data")); ffsd = val; if (!ffsd) { ffsd = apr_pcalloc(common_pool, sizeof(*ffsd)); ffsd->common_pool = common_pool; /* POSIX fcntl locks are per-process, so we need a mutex for intra-process synchronization when grabbing the repository write lock. */ SVN_ERR(svn_mutex__init(&ffsd->fs_write_lock, SVN_FS_FS__USE_LOCK_MUTEX, common_pool)); Functions like fs_library_vtable_t.pack_fs and fs_library_vtable_t.recover that don't take the common_pool parameter pass the pool parameter to fs_serialized_init. I think that means these functions should only be used from a single threaded process. Is that correct? If so we should document it or change the functions to handle the common_pool. I'm not sure how the absence of common_pool affects the BDB implementations. -- Certified & Supported Apache Subversion Downloads: http://www.wandisco.com/subversion/download