Return no task error in case of nothing to stop 14/70914/1
authorKyungwook Tak <k.tak@samsung.com>
Mon, 23 May 2016 05:27:04 +0000 (14:27 +0900)
committerKyungwook Tak <k.tak@samsung.com>
Mon, 23 May 2016 05:27:47 +0000 (14:27 +0900)
Change-Id: I5fc3740c1e990eec816fff7d19a476204d04ea2d
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
src/framework/client/content-screening.cpp
src/framework/client/handle-ext.cpp
src/framework/client/handle-ext.h

index 6e0c8e3..abaa660 100644 (file)
@@ -465,8 +465,8 @@ int csr_cs_scan_cancel(csr_cs_context_h handle)
 
        auto hExt = reinterpret_cast<Client::HandleExt *>(handle);
 
-       if (hExt->isStopped())
-               return CSR_ERROR_NONE;
+       if (!hExt->hasRunning() || hExt->isStopped())
+               return CSR_ERROR_NO_TASK;
 
        hExt->stop();
 
index 8e67aeb..eb317c3 100644 (file)
@@ -55,6 +55,19 @@ bool HandleExt::isStopped() const
        return m_stop.load();
 }
 
+bool HandleExt::hasRunning()
+{
+       std::unique_lock<std::mutex> l(m_mutex);
+       auto it = m_workerMap.begin();
+
+       while (it != m_workerMap.end()) {
+               if (!it->second.isDone.load())
+                       return true;
+       }
+
+       return false;
+}
+
 void HandleExt::eraseJoinableIf(std::function<bool(const WorkerMapPair &)> pred)
 {
        std::unique_lock<std::mutex> l(m_mutex);
index 6636597..7363abd 100644 (file)
@@ -45,6 +45,7 @@ public:
        void dispatchAsync(const Task &task);
        void stop(void);
        bool isStopped(void) const;
+       bool hasRunning(void);
 
        Callback m_cb; // TODO: to refine..