1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

ldb_mdb: Store pid to change destructor on fork

Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Garming Sam 2018-03-05 16:04:03 +13:00 committed by Andrew Bartlett
parent e4e6d794ee
commit 95d1e474cf
2 changed files with 24 additions and 0 deletions

View File

@ -595,6 +595,25 @@ static int lmdb_pvt_destructor(struct lmdb_private *lmdb)
{ {
struct lmdb_trans *ltx = NULL; struct lmdb_trans *ltx = NULL;
/* Check if this is a forked child */
if (getpid() != lmdb->pid) {
int fd = 0;
/*
* We cannot call mdb_env_close or commit any transactions,
* otherwise they might appear finished in the parent.
*
*/
if (mdb_env_get_fd(lmdb->env, &fd) == 0) {
close(fd);
}
/* Remove the pointer, so that no access should occur */
lmdb->env = NULL;
return 0;
}
/* /*
* Close the read transaction if it's open * Close the read transaction if it's open
*/ */
@ -685,6 +704,9 @@ static int lmdb_pvt_open(TALLOC_CTX *mem_ctx,
return ldb_mdb_err_map(ret); return ldb_mdb_err_map(ret);
} }
/* Store the original pid during the LMDB open */
lmdb->pid = getpid();
return LDB_SUCCESS; return LDB_SUCCESS;
} }

View File

@ -41,6 +41,8 @@ struct lmdb_private {
int error; int error;
MDB_txn *read_txn; MDB_txn *read_txn;
pid_t pid;
}; };
struct lmdb_trans { struct lmdb_trans {