summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Reams <jbreams@mongodb.com>2016-09-29 14:29:46 -0400
committerJonathan Reams <jbreams@mongodb.com>2017-09-15 11:23:56 -0400
commit06a1b1531ca268fb47ec9c2b0d5cce100a98595d (patch)
tree02fa0db53d3bd8c94d126bf8495e5f09a19cd9d0
parent32c4fbbb2241c421f7cec16c8bd84ace21c6e99f (diff)
downloadmongo-06a1b1531ca268fb47ec9c2b0d5cce100a98595d.tar.gz
SERVER-26389 Make javascript periodic interrupts disabled by default
(cherry picked from commit cb9e5e2f0a8ea4c47747e9eeac1aa4524092ea57)
-rw-r--r--src/mongo/scripting/deadline_monitor.cpp2
-rw-r--r--src/mongo/scripting/deadline_monitor.h12
2 files changed, 9 insertions, 5 deletions
diff --git a/src/mongo/scripting/deadline_monitor.cpp b/src/mongo/scripting/deadline_monitor.cpp
index 5eb0f52e5de..f75c34a0cc2 100644
--- a/src/mongo/scripting/deadline_monitor.cpp
+++ b/src/mongo/scripting/deadline_monitor.cpp
@@ -34,7 +34,7 @@
namespace mongo {
-MONGO_EXPORT_SERVER_PARAMETER(scriptingEngineInterruptIntervalMS, int, 1000);
+MONGO_EXPORT_SERVER_PARAMETER(scriptingEngineInterruptIntervalMS, int, 0);
int getScriptingEngineInterruptInterval() {
return scriptingEngineInterruptIntervalMS.load();
diff --git a/src/mongo/scripting/deadline_monitor.h b/src/mongo/scripting/deadline_monitor.h
index b1c2855dd46..05acd5c349c 100644
--- a/src/mongo/scripting/deadline_monitor.h
+++ b/src/mongo/scripting/deadline_monitor.h
@@ -138,7 +138,7 @@ private:
const Date_t now = Date_t::now();
const auto interruptInterval = Milliseconds{getScriptingEngineInterruptInterval()};
- if (now - lastInterruptCycle > interruptInterval) {
+ if ((interruptInterval.count() > 0) && (now - lastInterruptCycle > interruptInterval)) {
for (const auto& task : _tasks) {
if (task.second > now)
task.first->interrupt();
@@ -148,9 +148,13 @@ private:
// wait for a task to be added or a deadline to expire
if (_nearestDeadlineWallclock > now) {
- if (_nearestDeadlineWallclock == Date_t::max() ||
- _nearestDeadlineWallclock - now > interruptInterval) {
- _newDeadlineAvailable.wait_for(lk, interruptInterval);
+ if (_nearestDeadlineWallclock == Date_t::max()) {
+ if ((interruptInterval.count() > 0) &&
+ (_nearestDeadlineWallclock - now > interruptInterval)) {
+ _newDeadlineAvailable.wait_for(lk, interruptInterval);
+ } else {
+ _newDeadlineAvailable.wait(lk);
+ }
} else {
_newDeadlineAvailable.wait_until(lk,
_nearestDeadlineWallclock.toSystemTimePoint());