summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHallvard Furuseth <hallvard@openldap.org>2016-09-27 07:03:40 +0200
committerHallvard Furuseth <hallvard@openldap.org>2016-10-04 21:16:27 +0200
commit6355dade31e35af5527e9139a39fc1e3a5da04fd (patch)
treeedd4d98d91db55393393248fc27ce141d051df62
parent04acac634a7b276332e2cc4d389b8d647a0a7fad (diff)
downloadlmdb-6355dade31e35af5527e9139a39fc1e3a5da04fd.tar.gz
lmdb-6355dade31e35af5527e9139a39fc1e3a5da04fd.tar.bz2
lmdb-6355dade31e35af5527e9139a39fc1e3a5da04fd.zip
ITS#8505 Protect parent from fork()-pthread_exit()
-rw-r--r--libraries/liblmdb/mdb.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index 27582ae..af365b3 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -4747,7 +4747,11 @@ mdb_env_reader_dest(void *ptr)
{
MDB_reader *reader = ptr;
- reader->mr_pid = 0;
+#ifndef _WIN32
+ if (reader->mr_pid == getpid()) /* catch pthread_exit() in child process */
+#endif
+ /* We omit the mutex, so do this atomically (i.e. skip mr_txnid) */
+ reader->mr_pid = 0;
}
#ifdef _WIN32