Index: subversion/libsvn_fs_util/sqlite-util.c =================================================================== --- subversion/libsvn_fs_util/sqlite-util.c (revision 27979) +++ subversion/libsvn_fs_util/sqlite-util.c (working copy) @@ -21,8 +21,13 @@ #include #include +#include +#include #include #include +#ifndef SVN_HAVE_SQLITE_THREADSAFE_PREDICATE +#include +#endif #include @@ -204,6 +209,31 @@ #ifdef SVN_HAVE_SQLITE_THREADSAFE_PREDICATE /* sqlite3_threadsafe() was available at Subversion 'configure'-time. */ is_threadsafe = sqlite3_threadsafe(); +#else +#if APR_HAS_DSO + /* Attempt to dynamically load sqlite3_threadsafe(), since the + version of SQLite present at compile-time may've changed. */ + apr_status_t status; + apr_dso_handle_t *dso = NULL; + apr_dso_handle_sym_t symbol; + +#if DARWIN + status = apr_dso_load(&dso, "libsqlite3.dylib", pool); +#endif + if (dso == NULL) + status = apr_dso_load(&dso, "libsqlite3.so", pool); + + if (status == APR_SUCCESS && dso) + { + status = apr_dso_sym(&symbol, dso, "sqlite3_threadsafe"); + if (status == APR_SUCCESS && symbol) + { + int (*threadsafe_func)(void) = symbol; + is_threadsafe = (*threadsafe_func)(); + } + status = apr_dso_unload(dso); + } +#endif /* APR_HAS_DSO */ #endif /* SVN_HAVE_SQLITE_THREADSAFE_PREDICATE */ if (! is_threadsafe)