Treat . and .. as absolute path signals.
[shibboleth/xmltooling.git] / xmltooling / util / ReloadableXMLFile.cpp
index 5bdb545..172b813 100644 (file)
@@ -22,6 +22,7 @@
 \r
 #include "internal.h"\r
 #include "util/NDC.h"\r
+#include "util/PathResolver.h"\r
 #include "util/ReloadableXMLFile.h"\r
 #include "util/XMLConstants.h"\r
 #include "util/XMLHelper.h"\r
@@ -92,6 +93,8 @@ ReloadableXMLFile::ReloadableXMLFile(const DOMElement* e, Category& log)
         }\r
 \r
         if (m_local) {\r
+            XMLToolingConfig::getConfig().getPathResolver()->resolve(m_source, PathResolver::XMLTOOLING_CFG_FILE);\r
+\r
             flag=e->getAttributeNS(NULL,reloadChanges);\r
             if (!XMLString::equals(flag,xmlconstants::XML_FALSE) && !XMLString::equals(flag,xmlconstants::XML_ZERO)) {\r
 #ifdef WIN32\r
@@ -114,6 +117,7 @@ ReloadableXMLFile::ReloadableXMLFile(const DOMElement* e, Category& log)
             if (source && *source) {\r
                 auto_ptr_char temp2(source);\r
                 m_backing=temp2.get();\r
+                XMLToolingConfig::getConfig().getPathResolver()->resolve(m_backing, PathResolver::XMLTOOLING_RUN_FILE);\r
                 log.debug("backup remote resource with (%s)", m_backing.c_str());\r
             }\r
             source = e->getAttributeNS(NULL,reloadInterval);\r
@@ -170,7 +174,7 @@ pair<bool,DOMElement*> ReloadableXMLFile::load(bool backup)
                     doc=XMLToolingConfig::getConfig().getParser().parse(dsrc);\r
             }\r
 \r
-            m_log.infoStream() << "loaded XML resource (" << (backup ? m_backing : m_source) << ")" << CategoryStream::ENDLINE;\r
+            m_log.infoStream() << "loaded XML resource (" << (backup ? m_backing : m_source) << ")" << logging::eol;\r
 \r
             if (!backup && !m_backing.empty()) {\r
                 m_log.debug("backing up remote resource to (%s)", m_backing.c_str());\r
@@ -188,15 +192,15 @@ pair<bool,DOMElement*> ReloadableXMLFile::load(bool backup)
     }\r
     catch (XMLException& e) {\r
         auto_ptr_char msg(e.getMessage());\r
-        m_log.critStream() << "Xerces error while loading resource (" << (backup ? m_backing : m_source) << "): "\r
-            << msg.get() << CategoryStream::ENDLINE;\r
+        m_log.errorStream() << "Xerces error while loading resource (" << (backup ? m_backing : m_source) << "): "\r
+            << msg.get() << logging::eol;\r
         if (!backup && !m_backing.empty())\r
             return load(true);\r
         throw XMLParserException(msg.get());\r
     }\r
     catch (exception& e) {\r
-        m_log.critStream() << "error while loading configuration from ("\r
-            << (m_source.empty() ? "inline" : (backup ? m_backing : m_source)) << "): " << e.what() << CategoryStream::ENDLINE;\r
+        m_log.errorStream() << "error while loading configuration from ("\r
+            << (m_source.empty() ? "inline" : (backup ? m_backing : m_source)) << "): " << e.what() << logging::eol;\r
         if (!backup && !m_backing.empty())\r
             return load(true);\r
         throw;\r
@@ -225,10 +229,12 @@ Lockable* ReloadableXMLFile::lock()
             return this;\r
         \r
         // Elevate lock and recheck.\r
+        m_log.debug("timestamp of local resource changed, elevating to a write lock");\r
         m_lock->unlock();\r
         m_lock->wrlock();\r
         if (m_filestamp>=stat_buf.st_mtime) {\r
             // Somebody else handled it, just downgrade.\r
+            m_log.debug("update of local resource handled by another thread, downgrading lock");\r
             m_lock->unlock();\r
             m_lock->rdlock();\r
             return this;\r
@@ -247,10 +253,12 @@ Lockable* ReloadableXMLFile::lock()
             return this;\r
 \r
         // Elevate lock and recheck.\r
+        m_log.debug("reload interval for remote resource elapsed, elevating to a write lock");\r
         m_lock->unlock();\r
         m_lock->wrlock();\r
         if (now - m_filestamp < m_reloadInterval) {\r
             // Somebody else handled it, just downgrade.\r
+            m_log.debug("update of remote resource handled by another thread, downgrading lock");\r
             m_lock->unlock();\r
             m_lock->rdlock();\r
             return this;\r
@@ -272,6 +280,7 @@ Lockable* ReloadableXMLFile::lock()
     }\r
     \r
     // If we made it here, the swap may or may not have worked, but we need to relock.\r
+    m_log.debug("attempt to update resource complete, relocking");\r
     m_lock->rdlock();\r
     return this;\r
 }\r