X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=blobdiff_plain;f=dali%2Finternal%2Fsystem%2Fcommon%2Fasync-task-manager-impl.cpp;h=a1ed1ce70ce7f14bcd2f4d2c5c75955931728e96;hp=828d98ec40ffc164bc12433e4491b387a22ef06f;hb=f3adf97eb3baae9d874309cd2faf6ec5f3d06d40;hpb=f94f8425197e94b9488ff7a9c26ba96b293e4c5e diff --git a/dali/internal/system/common/async-task-manager-impl.cpp b/dali/internal/system/common/async-task-manager-impl.cpp index 828d98e..a1ed1ce 100644 --- a/dali/internal/system/common/async-task-manager-impl.cpp +++ b/dali/internal/system/common/async-task-manager-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -292,24 +292,36 @@ AsyncTaskPtr AsyncTaskManager::PopNextCompletedTask() void AsyncTaskManager::CompleteTask(AsyncTaskPtr task) { // Lock while adding task to the queue - Mutex::ScopedLock lock(mMutex); - for(auto iter = mRunningTasks.begin(), endIter = mRunningTasks.end(); iter != endIter; ++iter) { - if((*iter).first == task) + Mutex::ScopedLock lock(mMutex); + for(auto iter = mRunningTasks.begin(), endIter = mRunningTasks.end(); iter != endIter; ++iter) { - if(!(*iter).second) + if((*iter).first == task) { - mCompletedTasks.push_back(task); - } + if(!(*iter).second) + { + if(task->GetCallbackInvocationThread() == AsyncTask::ThreadType::MAIN_THREAD) + { + mCompletedTasks.push_back(task); + } + } - // Delete this task in running queue - mRunningTasks.erase(iter); - break; + // Delete this task in running queue + mRunningTasks.erase(iter); + break; + } } } // wake up the main thread - mTrigger->Trigger(); + if(task->GetCallbackInvocationThread() == AsyncTask::ThreadType::MAIN_THREAD) + { + mTrigger->Trigger(); + } + else + { + CallbackBase::Execute(*(task->GetCompletedCallback()), task); + } } void AsyncTaskManager::UnregisterProcessor()