From 6579f7c035427de86295ba0cd09c4969a179507e Mon Sep 17 00:00:00 2001 From: Eunki Hong Date: Mon, 25 Sep 2023 19:21:00 +0900 Subject: [PATCH] Safety check for control set/get property Since some workerthread can access and try to get/set control's visual, we might need to assert if worker thread try to use them. Note : Current logic might got error if someone try to change API before app create, but less care for now. Change-Id: I68cb0ff5b822721a73c4fd40f4b86d21ddf1759f Signed-off-by: Eunki Hong --- .../internal/controls/control/control-data-impl.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index b8c811f..427a394 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -586,11 +586,15 @@ Control::Impl::~Impl() Control::Impl& Control::Impl::Get(Internal::Control& internalControl) { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + return *internalControl.mImpl; } const Control::Impl& Control::Impl::Get(const Internal::Control& internalControl) { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + return *internalControl.mImpl; } @@ -715,6 +719,8 @@ void Control::Impl::RegisterVisual(Property::Index index, Toolkit::Visual::Base& void Control::Impl::RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, VisualState::Type enabled, DepthIndexValue::Type depthIndexValueSet, int depthIndex) { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + DALI_LOG_INFO(gLogFilter, Debug::Concise, "RegisterVisual:%d \n", index); bool visualReplaced(false); @@ -848,6 +854,8 @@ void Control::Impl::RegisterVisual(Property::Index index, Toolkit::Visual::Base& void Control::Impl::UnregisterVisual(Property::Index index) { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + RegisteredVisualContainer::Iterator iter; if(FindVisual(index, mVisuals, iter)) { @@ -961,6 +969,8 @@ void Control::Impl::StartObservingVisual(Toolkit::Visual::Base& visual) void Control::Impl::ResourceReady() { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + // Emit signal if all enabled visuals registered by the control are ready or there are no visuals. if(IsResourceReady()) { @@ -1177,6 +1187,8 @@ void Control::Impl::AppendAccessibilityAttribute(const std::string& key, const s void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const Property::Value& value) { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + Toolkit::Control control = Toolkit::Control::DownCast(BaseHandle(object)); if(control) @@ -1477,6 +1489,8 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index index) { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + Property::Value value; Toolkit::Control control = Toolkit::Control::DownCast(BaseHandle(object)); @@ -1848,6 +1862,8 @@ void Control::Impl::RecreateChangedVisuals(Dictionary& stateVisua void Control::Impl::ReplaceStateVisualsAndProperties(const StylePtr oldState, const StylePtr newState, const std::string& subState) { + DALI_ASSERT_ALWAYS(Stage::IsCoreThread() && "Core is not installed. Might call this API from worker thread?"); + // Collect all old visual names DictionaryKeys stateVisualsToRemove; if(oldState) -- 2.7.4