/* * __split_safe_free -- * Free a buffer if we can be sure no thread is accessing it, or schedule * it to be freed otherwise. */ static int __split_safe_free(WT_SESSION_IMPL *session, int exclusive, void *p, size_t s) { /* * We have swapped something in a page: if we don't have exclusive * access, check whether there are other threads in the same tree. */ if (!exclusive && __split_oldest_gen(session) == S2C(session)->split_gen + 1) exclusive = 1; if (exclusive) { __wt_free(session, p); return (0); } return (__split_stash_add(session, p, s)); }
/* * __split_safe_free -- * Free a buffer if we can be sure no thread is accessing it, or schedule * it to be freed otherwise. */ static int __split_safe_free(WT_SESSION_IMPL *session, uint64_t split_gen, bool exclusive, void *p, size_t s) { /* We should only call safe free if we aren't pinning the memory. */ WT_ASSERT(session, session->split_gen != split_gen); /* * We have swapped something in a page: if we don't have exclusive * access, check whether there are other threads in the same tree. */ if (!exclusive && __split_oldest_gen(session) > split_gen) exclusive = true; if (exclusive) { __wt_free(session, p); return (0); } return (__split_stash_add(session, split_gen, p, s)); }