RAII instead of catch(...) in factories, bubble more errors in debug mode
authorScott Cantor <cantor.2@osu.edu>
Mon, 14 Mar 2005 06:53:30 +0000 (06:53 +0000)
committerScott Cantor <cantor.2@osu.edu>
Mon, 14 Mar 2005 06:53:30 +0000 (06:53 +0000)
shib-target/shib-config.cpp
shib-target/shib-ini.cpp

index e36067f..ea89d58 100644 (file)
@@ -120,7 +120,9 @@ bool STConfig::init(const char* schemadir, const char* config)
         root.setPriority(Priority::FATAL);
     root.setAppender(new OstreamAppender("default",&cerr));
  
+#ifdef _DEBUG
     saml::NDC ndc("init");
+#endif
     Category& log = Category::getInstance("shibtarget.STConfig");
 
     if (!schemadir || !config) {
@@ -193,10 +195,7 @@ bool STConfig::init(const char* schemadir, const char* config)
     }
     catch (...) {
         log.fatal("caught exception while loading/initializing configuration");
-        delete m_ini;
-        delete m_rpcpool;
-        shibConf.term();
-        samlConf.term();
+        shutdown();
         return false;
     }
 #endif
@@ -208,7 +207,9 @@ bool STConfig::init(const char* schemadir, const char* config)
 
 void STConfig::shutdown()
 {
+#ifdef _DEBUG
     saml::NDC ndc("shutdown");
+#endif
     Category& log = Category::getInstance("shibtarget.STConfig");
     log.info("shutting down the library");
     delete m_rpcpool;
index 3f97561..aba1722 100644 (file)
@@ -188,15 +188,9 @@ namespace shibtarget {
 
 IConfig* STConfig::ShibTargetConfigFactory(const DOMElement* e)
 {
-    XMLConfig* ret=new XMLConfig(e);
-    try {
-        ret->getImplementation();
-    }
-    catch (...) {
-        delete ret;
-        throw;
-    }
-    return ret;
+    auto_ptr<XMLConfig> ret(new XMLConfig(e));
+    ret->getImplementation();
+    return ret.release();
 }
 
 XMLPropertySet::~XMLPropertySet()
@@ -209,7 +203,9 @@ XMLPropertySet::~XMLPropertySet()
 
 void XMLPropertySet::load(const DOMElement* e, Category& log, DOMNodeFilter* filter)
 {
-    NDC ndc("load");
+#ifdef _DEBUG
+    saml::NDC ndc("load");
+#endif
     m_root=e;
 
     // Process each attribute as a property.
@@ -360,7 +356,9 @@ const IPropertySet* XMLPropertySet::getPropertySet(const char* name, const char*
 XMLApplication::XMLApplication(const IConfig* ini, const Iterator<ICredentials*>& creds, const DOMElement* e, const XMLApplication* base)
     : m_ini(ini), m_base(base), m_profile(NULL), m_binding(NULL), m_bindingHook(NULL)
 {
+#ifdef _DEBUG
     NDC ndc("XMLApplication");
+#endif
     Category& log=Category::getInstance("shibtarget.XMLApplication");
 
     try {
@@ -484,10 +482,18 @@ XMLApplication::XMLApplication(const IConfig* ini, const Iterator<ICredentials*>
             bptr->addHook(m_bindingHook,m_bindingHook); // the hook is its own global context
         }
     }
+    catch (SAMLException& e) {
+        log.errorStream() << "Error while processing applicaton element: " << e.what() << CategoryStream::ENDLINE;
+        this->~XMLApplication();
+        throw;
+    }
+#ifndef _DEBUG
     catch (...) {
-        this->~XMLApplication();    // does this work?
+        log.error("Unexpected error while processing application element");
+        this->~XMLApplication();
         throw;
     }
+#endif
 }
 
 XMLApplication::~XMLApplication()
@@ -678,7 +684,9 @@ short XMLConfigImpl::acceptNode(const DOMNode* node) const
 
 void XMLConfigImpl::init(bool first)
 {
-    NDC ndc("XMLConfigImpl");
+#ifdef _DEBUG
+    saml::NDC ndc("XMLConfigImpl");
+#endif
     Category& log=Category::getInstance("shibtarget.XMLConfig");
 
     try {
@@ -943,13 +951,13 @@ void XMLConfigImpl::init(bool first)
         }
     }
     catch (SAMLException& e) {
-        log.errorStream() << "Error while loading target configuration: " << e.what() << CategoryStream::ENDLINE;
+        log.errorStream() << "Error while loading SP configuration: " << e.what() << CategoryStream::ENDLINE;
         this->~XMLConfigImpl();
         throw;
     }
 #ifndef _DEBUG
     catch (...) {
-        log.error("Unexpected error while loading target configuration");
+        log.error("Unexpected error while loading SP configuration");
         this->~XMLConfigImpl();
         throw;
     }