diff --git a/arangod/Cluster/TraverserEngineRegistry.cpp b/arangod/Cluster/TraverserEngineRegistry.cpp index 7c4e7717b2..bf6606a178 100644 --- a/arangod/Cluster/TraverserEngineRegistry.cpp +++ b/arangod/Cluster/TraverserEngineRegistry.cpp @@ -171,3 +171,16 @@ size_t TraverserEngineRegistry::numberRegisteredEngines() { return _engines.size(); } +/// @brief destroy all registered engines +void TraverserEngineRegistry::destroyAll() { + std::vector engines; + { + READ_LOCKER(readLocker, _lock); + for (auto& p : _engines) { + engines.push_back(p.first); + } + } + for (auto& i : engines) { + destroy(i, true); + } +} diff --git a/arangod/Cluster/TraverserEngineRegistry.h b/arangod/Cluster/TraverserEngineRegistry.h index 6989aa91ab..260637aa96 100644 --- a/arangod/Cluster/TraverserEngineRegistry.h +++ b/arangod/Cluster/TraverserEngineRegistry.h @@ -72,6 +72,9 @@ class TraverserEngineRegistry { /// @brief return number of registered engines size_t numberRegisteredEngines(); + /// @brief destroy all registered engines + void destroyAll(); + private: void destroy(TraverserEngineID, bool doLock); diff --git a/arangod/RestServer/AqlFeature.cpp b/arangod/RestServer/AqlFeature.cpp index 221ff94e98..d7c8a6f7b1 100644 --- a/arangod/RestServer/AqlFeature.cpp +++ b/arangod/RestServer/AqlFeature.cpp @@ -86,6 +86,7 @@ void AqlFeature::stop() { } LOG_TOPIC(DEBUG, Logger::QUERIES) << "AQL feature stopped"; QueryRegistryFeature::QUERY_REGISTRY->destroyAll(); + TraverserEngineRegistryFeature::TRAVERSER_ENGINE_REGISTRY->destroyAll(); // Wait until all AQL queries are done while (true) {