From: Changgyu Choi Date: Thu, 1 Aug 2024 02:19:27 +0000 (+0900) Subject: Prevent task name duplication X-Git-Tag: accepted/tizen/unified/20240820.163520~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c22d9de3a5d56f5d02df82db460da7813df9ba22;p=platform%2Fcore%2Fappfw%2Ftizen-core.git Prevent task name duplication When trying to create a task with an already existing name, it returns an error. Change-Id: Ie67105b2e0e82ea20f570b4ad73ce5c2253d166d Signed-off-by: Changgyu Choi --- diff --git a/src/tizen-core/context_manager.cc b/src/tizen-core/context_manager.cc index 3dcc467..9006d32 100644 --- a/src/tizen-core/context_manager.cc +++ b/src/tizen-core/context_manager.cc @@ -41,7 +41,13 @@ ContextManager& ContextManager::GetInst() { std::shared_ptr ContextManager::Create(std::string name, bool use_thread) { - auto context = std::make_shared(name, use_thread); + auto context = Find(name); + if (context != nullptr) { + _W("Already exist context : %s", name.c_str()); + return nullptr; + } + + context = std::make_shared(name, use_thread); std::lock_guard lock(mutex_); contexts_[std::move(name)] = context; return context; diff --git a/src/tizen-core/task.cc b/src/tizen-core/task.cc index 1111e63..049ad67 100644 --- a/src/tizen-core/task.cc +++ b/src/tizen-core/task.cc @@ -201,6 +201,9 @@ Task::Task(std::string name, bool use_thread) throw std::invalid_argument("main task must not use a thread"); context_ = ContextManager::GetInst().Create(name_, use_thread_); + if (context_ == nullptr) + throw std::invalid_argument("failed to create context"); + loop_ = g_main_loop_new(context_->GetHandle(), FALSE); } @@ -214,9 +217,13 @@ Task::~Task() { } std::shared_ptr Task::Create(std::string name, bool use_thread) { - auto task = std::make_shared(std::move(name), use_thread); - task->GetContext()->SetLoop(task); - return task; + try { + auto task = std::make_shared(std::move(name), use_thread); + task->GetContext()->SetLoop(task); + return task; + } catch (const std::bad_alloc& e) { + return nullptr; + } } void Task::Dispose() { diff --git a/tests/tizen-core_unittests/tizen_core_test.cc b/tests/tizen-core_unittests/tizen_core_test.cc index f67997d..7340f57 100644 --- a/tests/tizen-core_unittests/tizen_core_test.cc +++ b/tests/tizen-core_unittests/tizen_core_test.cc @@ -177,7 +177,7 @@ TEST_F(TizenCoreTest, tizen_core_ready_P) { TEST_F(TizenCoreTest, tizen_core_task_create_P) { tizen_core_task_h task = nullptr; - int ret = tizen_core_task_create("test_task", true, &task); + int ret = tizen_core_task_create("new_task", true, &task); ASSERT_EQ(ret, TIZEN_CORE_ERROR_NONE); ASSERT_NE(task, nullptr); tizen_core_task_destroy(task); @@ -190,6 +190,9 @@ TEST_F(TizenCoreTest, tizen_core_task_create_N) { tizen_core_task_h task = nullptr; ret = tizen_core_task_create("main", true, &task); ASSERT_EQ(ret, TIZEN_CORE_ERROR_INVALID_PARAMETER); + + ret = tizen_core_task_create("test_task", true, &task); + ASSERT_EQ(ret, TIZEN_CORE_ERROR_INVALID_PARAMETER); } TEST_F(TizenCoreTest, tizen_core_task_destroy_P) {