summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahoo-inc.com>2017-03-13 14:02:00 +0000
committerTor Brede Vekterli <vekterli@yahoo-inc.com>2017-03-13 14:20:53 +0000
commit0edbcb2ffab1f846ba17b5942e8e5043ab51f556 (patch)
treea9d5d319237d86ca8b9943a99f13c7cd0d456888 /searchcore
parent70b9e95241c0a9686e547c0588d8b655269f8722 (diff)
Use explicit task functor instead of lambda
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp33
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h3
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;