From: Andrew Bartlett Date: Thu, 15 Mar 2018 00:42:17 +0000 (+1300) Subject: ldb_wrap: Remove ldb_transaction_cancel_noerr from ldb_wrap_fork_hook() X-Git-Tag: ldb-1.4.0~640 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=46b6f2d782efb0d15e676c5be359e1a4145cf426;p=thirdparty%2Fsamba.git ldb_wrap: Remove ldb_transaction_cancel_noerr from ldb_wrap_fork_hook() Writing to a TDB, without locks (these are per-process) in a forked child is never going to end well, if a transaction is open at this point we have bigger problems. Signed-off-by: Andrew Bartlett Reviewed-by: Douglas Bagnall --- diff --git a/lib/ldb-samba/ldb_wrap.c b/lib/ldb-samba/ldb_wrap.c index 9959b04ed95..8c3bf6f7bf3 100644 --- a/lib/ldb-samba/ldb_wrap.c +++ b/lib/ldb-samba/ldb_wrap.c @@ -329,20 +329,11 @@ int samba_ldb_connect(struct ldb_context *ldb, struct loadparm_context *lp_ctx, } /* - when we fork() we need to make sure that any open ldb contexts have - any open transactions cancelled (ntdb databases doesn't need reopening, - as we don't use clear_if_first). - */ + call tdb_reopen_all() in case there is a TDB open so we are + not blocked from re-opening it inside ldb_tdb. +*/ void ldb_wrap_fork_hook(void) { - struct ldb_wrap *w; - - for (w=ldb_wrap_list; w; w=w->next) { - if (ldb_transaction_cancel_noerr(w->ldb) != LDB_SUCCESS) { - smb_panic("Failed to cancel child transactions\n"); - } - } - if (tdb_reopen_all(1) != 0) { smb_panic("tdb_reopen_all failed\n"); }