summaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/common/schedule_sequenced_task_callback.h
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/vespa/searchlib/common/schedule_sequenced_task_callback.h')
-rw-r--r--searchlib/src/vespa/searchlib/common/schedule_sequenced_task_callback.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/common/schedule_sequenced_task_callback.h b/searchlib/src/vespa/searchlib/common/schedule_sequenced_task_callback.h
new file mode 100644
index 00000000000..602ef1354e0
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/common/schedule_sequenced_task_callback.h
@@ -0,0 +1,28 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include "vespa/vespalib/util/idestructorcallback.h"
+#include <vespa/vespalib/util/isequencedtaskexecutor.h>
+
+namespace search {
+
+/**
+ * Class that schedules a sequenced task when instance is
+ * destroyed. Typically a shared pointer to an instance is passed
+ * around to multiple worker threads that performs portions of a
+ * larger task before dropping the shared pointer, triggering the
+ * callback when all worker threads have completed.
+ */
+class ScheduleSequencedTaskCallback : public vespalib::IDestructorCallback
+{
+ vespalib::ISequencedTaskExecutor& _executor;
+ vespalib::ISequencedTaskExecutor::ExecutorId _id;
+ std::unique_ptr<vespalib::Executor::Task> _task;
+public:
+ ScheduleSequencedTaskCallback(vespalib::ISequencedTaskExecutor& executor,
+ vespalib::ISequencedTaskExecutor::ExecutorId id,
+ std::unique_ptr<vespalib::Executor::Task> task) noexcept;
+ ~ScheduleSequencedTaskCallback() override;
+};
+
+} // namespace search