Add attached flag to EventBroker class 67/307967/2
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 15 Mar 2024 00:39:19 +0000 (09:39 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Fri, 15 Mar 2024 00:42:20 +0000 (09:42 +0900)
To check whether the EventBroker object is attached or not, the flag is added.

Change-Id: I53d9ba060c3283f12a7b400ae4b9ea9b24b417d8
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
tizen_base/event/event_broker.h
tizen_base/stub.cc
tizen_base/stub_event.cc
tizen_base/task.cc

index 333a8708e50ef6767d923788a898d9dee70db441..1e04ea41203c713c3740d03319991100463af290 100644 (file)
@@ -75,7 +75,12 @@ class EXPORT_API EventBroker {
 
   bool Empty() const { return queue_.IsEmpty(); }
 
+  void SetAttached(bool attached) { attached_ = attached; }
+
+  bool IsAttached() const { return attached_; }
+
  private:
+  bool attached_ = false;
   std::list<std::shared_ptr<EventHandler<T>>> handlers_;
   SharedQueue<std::shared_ptr<EventObject<T>>> queue_;
 };
index f59d9c479fad26d62e1fd61857c58e59a2966801..cc3b78764f1218744e5c56250b375e0ee3ca9fa4 100644 (file)
@@ -316,9 +316,14 @@ API int tizen_core_add_event(tizen_core_h core, tizen_core_event_h event,
     return TIZEN_CORE_ERROR_INVALID_PARAMETER;
   }
 
-  auto* task = static_cast<tizen_base::tizen_core::Task*>(core);
   auto* broker =
       static_cast<tizen_base::tizen_core::event::EventBroker<void*>*>(event);
+  if (broker->IsAttached()) {
+    _E("Already attached. event=%p", event);
+    return TIZEN_CORE_ERROR_INVALID_PARAMETER;
+  }
+
+  auto* task = static_cast<tizen_base::tizen_core::Task*>(core);
   auto event_source = task->AddEvent(
       std::shared_ptr<tizen_base::tizen_core::event::EventBroker<void*>>(
           broker));
index 9290c0ee40a6768cbaf8ef663d6e3af0abb57b5a..d4cffb705284663a20cb6e24314f4b3d33ce90d6 100644 (file)
@@ -109,6 +109,11 @@ API int tizen_core_event_destroy(tizen_core_event_h event) {
 
   auto* broker =
       static_cast<tizen_base::tizen_core::event::EventBroker<void*>*>(event);
+  if (broker->IsAttached()) {
+    _E("Event(%p) is attached to a source", event);
+    return TIZEN_CORE_ERROR_INVALID_PARAMETER;
+  }
+
   delete broker;
   return TIZEN_CORE_ERROR_NONE;
 }
index 01e3c22838eaaa38bc8472f5b7085c0b1f021b54..a034f6774604dca2a8e92b356f8ef1df3e2bf583 100644 (file)
@@ -105,7 +105,9 @@ class EventSource : public Source {
  public:
   EventSource(std::shared_ptr<Task> task,
               std::shared_ptr<event::EventBroker<T>> broker)
-      : Source(nullptr), task_(std::move(task)), broker_(std::move(broker)) {}
+      : Source(nullptr), task_(std::move(task)), broker_(std::move(broker)) {
+    broker_->SetAttached(true);
+  }
 
   void Emit(std::shared_ptr<event::EventObject<T>> object) {
     broker_->Emit(std::move(object));