You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ca...@apache.org on 2005/06/21 17:34:32 UTC

svn commit: r191668 - in /xerces/c/branches/xerces-2.7/src/xercesc/internal: XMLGrammarPoolImpl.cpp XMLGrammarPoolImpl.hpp XMLScanner.hpp

Author: cargilld
Date: Tue Jun 21 08:34:32 2005
New Revision: 191668

URL: http://svn.apache.org/viewcvs?rev=191668&view=rev
Log:
Add back changes Bertoni made that were overwritten.

Modified:
    xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp
    xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.hpp
    xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.hpp

Modified: xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp?rev=191668&r1=191667&r2=191668&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp Tue Jun 21 08:34:32 2005
@@ -300,7 +300,11 @@
     {
         ThrowXMLwithMemMgr(XSerializationException, XMLExcepts::XSer_GrammarPool_NotEmpty, memMgr);
     }
-    
+
+    // This object will take care of cleaning up if an exception is
+    // thrown during deserialization.
+    JanitorMemFunCall<XMLGrammarPoolImpl>   cleanup(this, &XMLGrammarPoolImpl::cleanUp);
+
     try 
     {
         XSerializeEngine  serEng(binIn, this);
@@ -340,18 +344,30 @@
     }
     catch(const OutOfMemoryException&)
     {
+        // This is a special case, because we don't want
+        // to execute cleanup code on out-of-memory
+        // conditions.
+        cleanup.release();
+
         throw;
     }
-    catch(...)
-    {
-        fLocked = false; // need to unset it so we can clean it out..
-        clear();  //clear all deserialized grammars
-        throw;
-    }
+
+    // Everything is OK, so we can release the cleanup object.
+    cleanup.release();
+
     if (fLocked) 
     {
         createXSModel();              
     }
+}
+
+
+void
+XMLGrammarPoolImpl::cleanUp()
+{
+    fLocked = false;
+
+    clear();
 }
 
 

Modified: xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.hpp
URL: http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.hpp?rev=191668&r1=191667&r2=191668&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.hpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.hpp Tue Jun 21 08:34:32 2005
@@ -263,6 +263,10 @@
 private:
 
     virtual void    createXSModel();
+
+    void
+    cleanUp();
+
     // -----------------------------------------------------------------------
     /** name  Unimplemented copy constructor and operator= */
     // -----------------------------------------------------------------------

Modified: xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.hpp
URL: http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.hpp?rev=191668&r1=191667&r2=191668&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.hpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.hpp Tue Jun 21 08:34:32 2005
@@ -18,7 +18,6 @@
  * $Id$
  */
 
-
 #if !defined(XMLSCANNER_HPP)
 #define XMLSCANNER_HPP
 
@@ -807,6 +806,7 @@
     //  Private helper methods
     // -----------------------------------------------------------------------
     void commonInit();
+    void cleanUp();
 
     // -----------------------------------------------------------------------
     //  Private scanning methods



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org