]> git.sur5r.net Git - openldap/commitdiff
Fix SysV semaphores - repair mti_txnid.
authorHallvard Furuseth <hallvard@openldap.org>
Fri, 5 Dec 2014 17:18:53 +0000 (18:18 +0100)
committerHallvard Furuseth <hallvard@openldap.org>
Fri, 5 Dec 2014 17:18:53 +0000 (18:18 +0100)
Similar to 443a7e40c4280cfd07cbf80c5de62ea072b136e3.

libraries/liblmdb/mdb.c

index 7a71e18a0ddf99e05e9b8007a87eb7d18ee5e2d0..a4f13e60f65f2a6372d7cb0bc2f1b76ad177152d 100644 (file)
@@ -2573,9 +2573,17 @@ mdb_txn_renew0(MDB_txn *txn)
                if (ti) {
                        if (LOCK_MUTEX(rc, env, MDB_MUTEX(env, w)))
                                return rc;
-
+#ifdef MDB_USE_SYSV_SEM
+                       meta = env->me_metas[ mdb_env_pick_meta(env) ];
+                       txn->mt_txnid = meta->mm_txnid;
+                       /* Update mti_txnid like mdb_mutex_failed() would,
+                        * in case last writer crashed before updating it.
+                        */
+                       ti->mti_txnid = txn->mt_txnid;
+#else
                        txn->mt_txnid = ti->mti_txnid;
                        meta = env->me_metas[txn->mt_txnid & 1];
+#endif
                } else {
                        meta = env->me_metas[ mdb_env_pick_meta(env) ];
                        txn->mt_txnid = meta->mm_txnid;