Prevent task name duplication 33/315433/5
authorChanggyu Choi <changyu.choi@samsung.com>
Thu, 1 Aug 2024 02:19:27 +0000 (11:19 +0900)
committerChanggyu Choi <changyu.choi@samsung.com>
Thu, 1 Aug 2024 07:27:14 +0000 (16:27 +0900)
When trying to create a task with an already existing name, it returns an error.

Change-Id: Ie67105b2e0e82ea20f570b4ad73ce5c2253d166d
Signed-off-by: Changgyu Choi <changyu.choi@samsung.com>
src/tizen-core/context_manager.cc
src/tizen-core/task.cc
tests/tizen-core_unittests/tizen_core_test.cc

index 3dcc467f5ef4976078fd777ccdfaffbfd82f1477..9006d32c160c52b19c31500a7869d53d90c4ee27 100644 (file)
@@ -41,7 +41,13 @@ ContextManager& ContextManager::GetInst() {
 
 std::shared_ptr<Context> ContextManager::Create(std::string name,
                                                 bool use_thread) {
-  auto context = std::make_shared<Context>(name, use_thread);
+  auto context = Find(name);
+  if (context != nullptr) {
+    _W("Already exist context : %s", name.c_str());
+    return nullptr;
+  }
+
+  context = std::make_shared<Context>(name, use_thread);
   std::lock_guard<std::recursive_mutex> lock(mutex_);
   contexts_[std::move(name)] = context;
   return context;
index 1111e63ceee2721a36be8515c32abcc22d8e516e..049ad6736e4c6c6c9088b18969ee80f131dcbb67 100644 (file)
@@ -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> Task::Create(std::string name, bool use_thread) {
-  auto task = std::make_shared<Task>(std::move(name), use_thread);
-  task->GetContext()->SetLoop(task);
-  return task;
+  try {
+    auto task = std::make_shared<Task>(std::move(name), use_thread);
+    task->GetContext()->SetLoop(task);
+    return task;
+  } catch (const std::bad_alloc& e) {
+    return nullptr;
+  }
 }
 
 void Task::Dispose() {
index f67997dece5f8d68c51ee1ef558e4b1df086b6d6..7340f575c617d783afcdc948a3839340fdc27b94 100644 (file)
@@ -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) {