summaryrefslogtreecommitdiff
path: root/src/mongo/util
diff options
context:
space:
mode:
authorDavid Storch <david.storch@mongodb.com>2020-03-04 14:15:27 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-03-06 20:40:35 +0000
commit4f1af057ed0434099fe13dbaa50b00589d84bb48 (patch)
tree7afc53a88e080feda6ad9267396091bc95d2552a /src/mongo/util
parente628734fdce256588793b8eda0998f04f5b696e6 (diff)
downloadmongo-4f1af057ed0434099fe13dbaa50b00589d84bb48.tar.gz
SERVER-46631 Optimize acquiring a ticket from TicketHolder in the uncontended case
Diffstat (limited to 'src/mongo/util')
-rw-r--r--src/mongo/util/concurrency/ticketholder.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/mongo/util/concurrency/ticketholder.cpp b/src/mongo/util/concurrency/ticketholder.cpp
index 45bf7e51bc2..d087b215da4 100644
--- a/src/mongo/util/concurrency/ticketholder.cpp
+++ b/src/mongo/util/concurrency/ticketholder.cpp
@@ -95,6 +95,11 @@ void TicketHolder::waitForTicket(OperationContext* opCtx) {
}
bool TicketHolder::waitForTicketUntil(OperationContext* opCtx, Date_t until) {
+ // Attempt to get a ticket without waiting in order to avoid expensive time calculations.
+ if (sem_trywait(&_sem) == 0) {
+ return true;
+ }
+
const Milliseconds intervalMs(500);
struct timespec ts;