diff options
author | Keith Bostic <keith.bostic@mongodb.com> | 2015-11-24 08:17:53 -0500 |
---|---|---|
committer | Michael Cahill <michael.cahill@mongodb.com> | 2015-12-02 14:56:23 +1100 |
commit | 06a5c7b7a99053110395209c23ff26d39ba22db4 (patch) | |
tree | 1c130126a30da016af47a133be5f6f6d38485e00 | |
parent | 16a418b471953ad04973f5b013b1647e940ab769 (diff) | |
download | mongo-06a5c7b7a99053110395209c23ff26d39ba22db4.tar.gz |
Merge pull request #2333 from wiredtiger/WT-2337-perf
WT-2237 Avoid yields if we race allocating transaction IDs.
(cherry picked from commit e90b5906b969e9e34c8aa7e304a5983ef8077bca)
-rw-r--r-- | src/include/txn.i | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/include/txn.i b/src/include/txn.i index 3701d81522a..ceea2e4b581 100644 --- a/src/include/txn.i +++ b/src/include/txn.i @@ -314,6 +314,7 @@ __wt_txn_id_alloc(WT_SESSION_IMPL *session, bool publish) { WT_TXN_GLOBAL *txn_global; uint64_t id; + u_int i; txn_global = &S2C(session)->txn_global; @@ -344,14 +345,17 @@ __wt_txn_id_alloc(WT_SESSION_IMPL *session, bool publish) if (publish) { session->txn.id = id; - WT_PUBLISH(WT_SESSION_TXN_STATE(session)->id, id); + WT_SESSION_TXN_STATE(session)->id = id; } - while (txn_global->current != id || - !__wt_atomic_casv64(&txn_global->current, id, id + 1)) - __wt_yield(); + for (i = 0; txn_global->current != id; i++) + if (i < 100) + WT_PAUSE(); + else + __wt_yield(); - return (id); + WT_PUBLISH(txn_global->current, id + 1); + return (id); } /* |