From: Chihun Jeong Date: Thu, 8 Sep 2022 05:07:59 +0000 (+0900) Subject: AurumXML: fix error AtspiAccessibleWatcher uses XMLDocMap before creation of XMLTree. X-Git-Tag: accepted/tizen/unified/20220914.164041^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=764c312c649c9ff507f7b876787e8df13e4b203b;p=platform%2Fcore%2Fuifw%2Faurum.git AurumXML: fix error AtspiAccessibleWatcher uses XMLDocMap before creation of XMLTree. Change-Id: I3575692f7beeacf1315ac429ff939d1bb5f0c03b --- diff --git a/libaurum/inc/AurumXML.h b/libaurum/inc/AurumXML.h index 989320d..f8a86b1 100644 --- a/libaurum/inc/AurumXML.h +++ b/libaurum/inc/AurumXML.h @@ -19,6 +19,7 @@ #define _AURUM_XML_H_ #include +#include #include "Accessible.h" #include "config.h" @@ -44,7 +45,7 @@ public: * * @since_tizen 7.0 */ - AurumXML(std::shared_ptr root); + AurumXML(std::shared_ptr root, std::mutex& XMLMutex); /** * @brief Destroy the AurumXML object @@ -130,6 +131,7 @@ private: xml_document *mDoc; std::shared_ptr mRoot; std::unordered_map> mXNodeMap; + std::mutex& XMLMutex; }; } // namespace Aurum diff --git a/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h b/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h index 90c88a4..e63bf03 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h +++ b/libaurum/inc/Impl/Accessibility/AtspiAccessibleWatcher.h @@ -170,6 +170,7 @@ private: static std::mutex mMutex; static GMainLoop *mLoop; bool isTv; + std::mutex XMLMutex; }; } diff --git a/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h b/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h index 5dcce5d..bf480cb 100644 --- a/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h +++ b/libaurum/inc/Impl/Accessibility/MockAccessibleWatcher.h @@ -98,7 +98,6 @@ private: std::map> mActiveAppMap; std::map> mXMLDocMap; - }; } diff --git a/libaurum/src/AurumXML.cc b/libaurum/src/AurumXML.cc index fe1e0bf..4067afe 100644 --- a/libaurum/src/AurumXML.cc +++ b/libaurum/src/AurumXML.cc @@ -19,10 +19,14 @@ using namespace Aurum; -AurumXML::AurumXML(std::shared_ptr root) : mRoot(root) +AurumXML::AurumXML(std::shared_ptr root, std::mutex& XMLMutex) : mRoot(root), XMLMutex(XMLMutex) { + XMLMutex.lock(); + mDoc = new xml_document(); if (mRoot) this->createXMLtree(); + + XMLMutex.unlock(); } AurumXML::~AurumXML() diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc index cab5764..8e91895 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc @@ -200,7 +200,7 @@ void AtspiAccessibleWatcher::appendApp(AtspiAccessibleWatcher *instance, AtspiAc instance->mXMLDocMap.erase(package); } instance->mXMLDocMap.insert(std::pair>(package, - std::make_shared(std::make_shared(app)))); + std::make_shared(std::make_shared(app), XMLMutex))); } } @@ -351,6 +351,16 @@ std::map> AtspiAccessi std::map> AtspiAccessibleWatcher::getXMLDocMap(void) { + bool isFirstWaiting = true; + while(!XMLMutex.try_lock()) + { + if(isFirstWaiting) + { + LOGI("Waiting XMLTree Construct"); + isFirstWaiting = false; + } + } + XMLMutex.unlock(); return mXMLDocMap; }