#define _AURUM_XML_H_
#include <unordered_map>
+#include <mutex>
#include "Accessible.h"
#include "config.h"
*
* @since_tizen 7.0
*/
- AurumXML(std::shared_ptr<AccessibleNode> root);
+ AurumXML(std::shared_ptr<AccessibleNode> root, std::mutex& XMLMutex);
/**
* @brief Destroy the AurumXML object
xml_document *mDoc;
std::shared_ptr<AccessibleNode> mRoot;
std::unordered_map<std::string, std::shared_ptr<AccessibleNode>> mXNodeMap;
+ std::mutex& XMLMutex;
};
} // namespace Aurum
static std::mutex mMutex;
static GMainLoop *mLoop;
bool isTv;
+ std::mutex XMLMutex;
};
}
std::map<AtspiAccessible *, std::shared_ptr<AccessibleApplication>> mActiveAppMap;
std::map<std::string, std::shared_ptr<AurumXML>> mXMLDocMap;
-
};
}
using namespace Aurum;
-AurumXML::AurumXML(std::shared_ptr<AccessibleNode> root) : mRoot(root)
+AurumXML::AurumXML(std::shared_ptr<AccessibleNode> root, std::mutex& XMLMutex) : mRoot(root), XMLMutex(XMLMutex)
{
+ XMLMutex.lock();
+
mDoc = new xml_document();
if (mRoot) this->createXMLtree();
+
+ XMLMutex.unlock();
}
AurumXML::~AurumXML()
instance->mXMLDocMap.erase(package);
}
instance->mXMLDocMap.insert(std::pair<std::string, std::shared_ptr<AurumXML>>(package,
- std::make_shared<AurumXML>(std::make_shared<AtspiAccessibleNode>(app))));
+ std::make_shared<AurumXML>(std::make_shared<AtspiAccessibleNode>(app), XMLMutex)));
}
}
std::map<std::string, std::shared_ptr<AurumXML>> AtspiAccessibleWatcher::getXMLDocMap(void)
{
+ bool isFirstWaiting = true;
+ while(!XMLMutex.try_lock())
+ {
+ if(isFirstWaiting)
+ {
+ LOGI("Waiting XMLTree Construct");
+ isFirstWaiting = false;
+ }
+ }
+ XMLMutex.unlock();
return mXMLDocMap;
}