From: leo@yuriev.ru Date: Fri, 17 Oct 2014 22:35:41 +0000 (+0000) Subject: ITS#7970 LMDB: Critical Heisenbug X-Git-Tag: LMDB_0.9.15~32 X-Git-Url: https://git.sur5r.net/?p=openldap;a=commitdiff_plain;h=8230b1b63003f5e4910948687c0ceba0bed1d624 ITS#7970 LMDB: Critical Heisenbug Inconsistent reading & SIGSEGV due to the race condition. --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 89d4a2a257..27dbb9b1ae 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -2539,7 +2539,10 @@ mdb_txn_renew0(MDB_txn *txn) return rc; } } - txn->mt_txnid = r->mr_txnid = ti->mti_txnid; + do /* LY: Retry on a race, ITS#7970. */ + r->mr_txnid = ti->mti_txnid; + while(r->mr_txnid != ti->mti_txnid); + txn->mt_txnid = r->mr_txnid; txn->mt_u.reader = r; meta = env->me_metas[txn->mt_txnid & 1]; }