diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-03-13 14:02:00 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-03-13 14:20:53 +0000 |
commit | 0edbcb2ffab1f846ba17b5942e8e5043ab51f556 (patch) | |
tree | a9d5d319237d86ca8b9943a99f13c7cd0d456888 /searchcore | |
parent | 70b9e95241c0a9686e547c0588d8b655269f8722 (diff) |
Use explicit task functor instead of lambda
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/documentdb.cpp | 33 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/documentdb.h | 3 |
2 files changed, 31 insertions, 5 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp index d4308f96321..92c65ced71f 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp @@ -249,6 +249,32 @@ DocumentDB::internalInit() &DocumentDB::initManagers))); } +class InitDoneTask : public vespalib::Executor::Task { + DocumentDB::InitializeThreads _initializeThreads; + std::shared_ptr<TaskRunner> _taskRunner; + DocumentDBConfig::SP _configSnapshot; + DocumentDB& _self; +public: + InitDoneTask(DocumentDB::InitializeThreads initializeThreads, + std::shared_ptr<TaskRunner> taskRunner, + DocumentDBConfig::SP configSnapshot, + DocumentDB& self) + : _initializeThreads(std::move(initializeThreads)), + _taskRunner(std::move(taskRunner)), + _configSnapshot(std::move(configSnapshot)), + _self(self) + { + } + + ~InitDoneTask(); + + void run() override { + _self.initFinish(std::move(_configSnapshot)); + } +}; + +InitDoneTask::~InitDoneTask() { +} void DocumentDB::initManagers() @@ -264,14 +290,11 @@ DocumentDB::initManagers() _initializeThreads.reset(); std::shared_ptr<TaskRunner> taskRunner(std::make_shared<TaskRunner> (*initializeThreads)); - // Note: explicit listing in lambda to keep variables live - auto doneTask = makeLambdaTask([initializeThreads, taskRunner, - configSnapshot, this]() - { initFinish(configSnapshot); }); + auto doneTask = std::make_unique<InitDoneTask>(std::move(initializeThreads), taskRunner, + std::move(configSnapshot), *this); taskRunner->runTask(rootTask, _writeService.master(), std::move(doneTask)); } - void DocumentDB::initFinish(DocumentDBConfig::SP configSnapshot) { diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h index 94fd260f934..1e8a59b72a4 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h @@ -253,6 +253,9 @@ private: template <typename FunctionType> inline void masterExecute(FunctionType &&function); + // Invokes initFinish() on self + friend class InitDoneTask; + public: typedef std::unique_ptr<DocumentDB> UP; typedef std::shared_ptr<DocumentDB> SP; |