diff --git a/arangod/Scheduler/SchedulerFeature.cpp b/arangod/Scheduler/SchedulerFeature.cpp index 666b420d94..a624d72ec4 100644 --- a/arangod/Scheduler/SchedulerFeature.cpp +++ b/arangod/Scheduler/SchedulerFeature.cpp @@ -65,10 +65,10 @@ size_t defaultNumberOfThreads() { namespace arangodb { -Scheduler* SchedulerFeature::SCHEDULER = nullptr; +SupervisedScheduler* SchedulerFeature::SCHEDULER = nullptr; SchedulerFeature::SchedulerFeature(application_features::ApplicationServer& server) - : ApplicationFeature(server, "Scheduler"), + : ApplicationFeature(server, "Scheduler"), _scheduler(nullptr) { setOptional(false); startsAfter("GreetingsPhase"); @@ -162,19 +162,21 @@ void SchedulerFeature::validateOptions(std::shared_ptr) void SchedulerFeature::prepare() { TRI_ASSERT(2 <= _nrMinimalThreads); TRI_ASSERT(_nrMinimalThreads <= _nrMaximalThreads); - -//wait for windows fix or implement operator new +// wait for windows fix or implement operator new #if (_MSC_VER >= 1) #pragma warning(push) -#pragma warning(disable : 4316) // Object allocated on the heap may not be aligned for this type +#pragma warning(disable : 4316) // Object allocated on the heap may not be aligned for this type #endif - _scheduler = + auto sched = std::make_unique(_nrMinimalThreads, _nrMaximalThreads, _queueSize, _fifo1Size, _fifo2Size); #if (_MSC_VER >= 1) #pragma warning(pop) #endif - SCHEDULER = _scheduler.get(); + + SCHEDULER = sched.get(); + + _scheduler = std::move(sched); } void SchedulerFeature::start() { diff --git a/arangod/Scheduler/SchedulerFeature.h b/arangod/Scheduler/SchedulerFeature.h index 0320c2ce53..0e5d60d3fb 100644 --- a/arangod/Scheduler/SchedulerFeature.h +++ b/arangod/Scheduler/SchedulerFeature.h @@ -27,12 +27,13 @@ #include "ApplicationFeatures/ApplicationFeature.h" #include "GeneralServer/Socket.h" // This is required for asio_ns::signal_set #include "Scheduler/Scheduler.h" +#include "Scheduler/SupervisedScheduler.h" namespace arangodb { class SchedulerFeature final : public application_features::ApplicationFeature { public: - static Scheduler* SCHEDULER; + static SupervisedScheduler* SCHEDULER; explicit SchedulerFeature(application_features::ApplicationServer& server); ~SchedulerFeature(); diff --git a/tests/Cluster/ClusterCommTest.cpp b/tests/Cluster/ClusterCommTest.cpp index 16b5ef48cd..60c830ddaa 100644 --- a/tests/Cluster/ClusterCommTest.cpp +++ b/tests/Cluster/ClusterCommTest.cpp @@ -78,7 +78,7 @@ class ClusterCommTester : public ClusterComm { somethingReceived.broadcast(); } // signalResponse - Scheduler* _oldSched; + decltype(SchedulerFeature::SCHEDULER) _oldSched; SupervisedScheduler _testerSched; }; // class ClusterCommTester