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