From a4ab5521bd52aab72cca99c6ee1937ccfaa270d5 Mon Sep 17 00:00:00 2001
From: Danilo Piparo <danilo.piparo@cern.ch>
Date: Fri, 25 Aug 2017 14:09:10 +0200
Subject: [PATCH] Add move assignment and ctor to TTaskGroup, delete copy ctor

---
 core/imt/inc/ROOT/TTaskGroup.hxx |  3 +++
 core/imt/src/TTaskGroup.cxx      | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/core/imt/inc/ROOT/TTaskGroup.hxx b/core/imt/inc/ROOT/TTaskGroup.hxx
index e3c4b6cf157..e3cc32f8f25 100644
--- a/core/imt/inc/ROOT/TTaskGroup.hxx
+++ b/core/imt/inc/ROOT/TTaskGroup.hxx
@@ -44,6 +44,9 @@ private:
 
 public:
    TTaskGroup();
+   TTaskGroup( TTaskGroup&& other );
+   TTaskGroup(const TTaskGroup& ) = delete;
+   TTaskGroup& operator=( TTaskGroup&& other );
    ~TTaskGroup();
 
    void Run(const std::function<void(void)> &closure);
diff --git a/core/imt/src/TTaskGroup.cxx b/core/imt/src/TTaskGroup.cxx
index f383622d373..057972ed575 100644
--- a/core/imt/src/TTaskGroup.cxx
+++ b/core/imt/src/TTaskGroup.cxx
@@ -42,8 +42,20 @@ TTaskGroup::TTaskGroup()
    fTaskContainer = ((TaskContainerPtr_t *)new tbb::task_group());
 }
 
+TTaskGroup::TTaskGroup( TTaskGroup&& other ) {
+   *this = std::move(other);
+}
+
+TTaskGroup& TTaskGroup::operator=( TTaskGroup&& other ) {
+   fTaskContainer = other.fTaskContainer;
+   other.fTaskContainer = nullptr;
+   fCanRun.store(other.fCanRun);
+   return *this;
+}
+
 TTaskGroup::~TTaskGroup()
 {
+   if (!fTaskContainer) return;
    Wait();
    delete ((tbb::task_group *)fTaskContainer);
 }
-- 
GitLab