summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Bostic <keith.bostic@mongodb.com>2015-11-24 08:17:53 -0500
committerMichael Cahill <michael.cahill@mongodb.com>2015-12-02 14:56:23 +1100
commit06a5c7b7a99053110395209c23ff26d39ba22db4 (patch)
tree1c130126a30da016af47a133be5f6f6d38485e00 /src
parent16a418b471953ad04973f5b013b1647e940ab769 (diff)
downloadmongo-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)
Diffstat (limited to 'src')
-rw-r--r--src/include/txn.i14
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);
}
/*