Author: dbertoni
Date: Fri Jun 3 14:49:23 2005
New Revision: 179897
URL: http://svn.apache.org/viewcvs?rev=179897&view=rev
Log:
Fixes for Jira issue XERCESC-1348.
Modified:
xerces/c/trunk/src/xercesc/internal/DGXMLScanner.cpp
xerces/c/trunk/src/xercesc/internal/IGXMLScanner.cpp
Modified: xerces/c/trunk/src/xercesc/internal/DGXMLScanner.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/internal/DGXMLScanner.cpp?rev=179897&r1=179896&r2=179897&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/internal/DGXMLScanner.cpp (original)
+++ xerces/c/trunk/src/xercesc/internal/DGXMLScanner.cpp Fri Jun 3 14:49:23
2005
@@ -809,12 +809,15 @@
//
// Only do this if we are not reusing the validator! If we are reusing,
// then look it up instead. It has to exist!
- DTDElementDecl* rootDecl = new (fGrammarPoolMemoryManager) DTDElementDecl
+ MemoryManager* const rootDeclMgr =
+ fUseCachedGrammar ? fMemoryManager : fGrammarPoolMemoryManager;
+
+ DTDElementDecl* rootDecl = new (rootDeclMgr) DTDElementDecl
(
bbRootName.getRawBuffer()
, fEmptyNamespaceId
, DTDElementDecl::Any
- , fGrammarPoolMemoryManager
+ , rootDeclMgr
);
Janitor<DTDElementDecl> rootDeclJanitor(rootDecl);
@@ -1001,27 +1004,6 @@
fDocTypeHandler->startExtSubset();
fDocTypeHandler->endExtSubset();
}
- // we *cannot* identify the root element on
- // cached grammars; else we risk breaking multithreaded
- // applications. - NG
- /*******
- rootDecl = (DTDElementDecl*)
fGrammar->getElemDecl(fEmptyNamespaceId, 0, bbRootName.getRawBuffer(),
Grammar::TOP_LEVEL_SCOPE);
-
- if (rootDecl)
-
((DTDGrammar*)fGrammar)->setRootElemId(rootDecl->getId());
- else {
- rootDecl = new (fGrammarPoolMemoryManager)
DTDElementDecl
- (
- bbRootName.getRawBuffer()
- , fEmptyNamespaceId
- , DTDElementDecl::Any
- , fGrammarPoolMemoryManager
- );
- rootDecl->setCreateReason(DTDElementDecl::AsRootElem);
- rootDecl->setExternalElemDeclaration(true);
-
((DTDGrammar*)fGrammar)->setRootElemId(fGrammar->putElemDecl(rootDecl));
- }
- *********/
return;
}
@@ -1078,7 +1060,7 @@
// with an external entity. Put a janitor on it to insure it gets
// cleaned up. The reader manager does not adopt them.
const XMLCh gDTDStr[] = { chLatin_D, chLatin_T, chLatin_D , chNull
};
- DTDEntityDecl* declDTD = new (fGrammarPoolMemoryManager)
DTDEntityDecl(gDTDStr, false, fGrammarPoolMemoryManager);
+ DTDEntityDecl* declDTD = new (fMemoryManager)
DTDEntityDecl(gDTDStr, false, fMemoryManager);
declDTD->setSystemId(sysId);
Janitor<DTDEntityDecl> janDecl(declDTD);
@@ -1850,7 +1832,7 @@
// with an external entity. Put a janitor on it to insure it gets
// cleaned up. The reader manager does not adopt them.
const XMLCh gDTDStr[] = { chLatin_D, chLatin_T, chLatin_D , chNull };
- DTDEntityDecl* declDTD = new (fGrammarPoolMemoryManager)
DTDEntityDecl(gDTDStr, false, fGrammarPoolMemoryManager);
+ DTDEntityDecl* declDTD = new (fMemoryManager) DTDEntityDecl(gDTDStr,
false, fMemoryManager);
declDTD->setSystemId(src.getSystemId());
Janitor<DTDEntityDecl> janDecl(declDTD);
Modified: xerces/c/trunk/src/xercesc/internal/IGXMLScanner.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/internal/IGXMLScanner.cpp?rev=179897&r1=179896&r2=179897&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/internal/IGXMLScanner.cpp (original)
+++ xerces/c/trunk/src/xercesc/internal/IGXMLScanner.cpp Fri Jun 3 14:49:23
2005
@@ -1273,12 +1273,15 @@
//
// Only do this if we are not reusing the validator! If we are reusing,
// then look it up instead. It has to exist!
- DTDElementDecl* rootDecl = new (fGrammarPoolMemoryManager) DTDElementDecl
+ MemoryManager* const rootDeclMgr =
+ fUseCachedGrammar ? fMemoryManager : fGrammarPoolMemoryManager;
+
+ DTDElementDecl* rootDecl = new (rootDeclMgr) DTDElementDecl
(
bbRootName.getRawBuffer()
, fEmptyNamespaceId
, DTDElementDecl::Any
- , fGrammarPoolMemoryManager
+ , rootDeclMgr
);
Janitor<DTDElementDecl> rootDeclJanitor(rootDecl);
@@ -1465,25 +1468,6 @@
fDocTypeHandler->startExtSubset();
fDocTypeHandler->endExtSubset();
}
- // should not be modifying cached grammars!
- /********
- rootDecl = (DTDElementDecl*)
fGrammar->getElemDecl(fEmptyNamespaceId, 0, bbRootName.getRawBuffer(),
Grammar::TOP_LEVEL_SCOPE);
-
- if (rootDecl)
-
((DTDGrammar*)fGrammar)->setRootElemId(rootDecl->getId());
- else {
- rootDecl = new (fGrammarPoolMemoryManager)
DTDElementDecl
- (
- bbRootName.getRawBuffer()
- , fEmptyNamespaceId
- , DTDElementDecl::Any
- , fGrammarPoolMemoryManager
- );
- rootDecl->setCreateReason(DTDElementDecl::AsRootElem);
- rootDecl->setExternalElemDeclaration(true);
-
((DTDGrammar*)fGrammar)->setRootElemId(fGrammar->putElemDecl(rootDecl));
- }
- ********/
return;
}
@@ -1540,7 +1524,7 @@
// with an external entity. Put a janitor on it to insure it gets
// cleaned up. The reader manager does not adopt them.
const XMLCh gDTDStr[] = { chLatin_D, chLatin_T, chLatin_D , chNull
};
- DTDEntityDecl* declDTD = new (fGrammarPoolMemoryManager)
DTDEntityDecl(gDTDStr, false, fGrammarPoolMemoryManager);
+ DTDEntityDecl* declDTD = new (fMemoryManager)
DTDEntityDecl(gDTDStr, false, fMemoryManager);
declDTD->setSystemId(sysId);
Janitor<DTDEntityDecl> janDecl(declDTD);
@@ -3141,7 +3125,7 @@
// with an external entity. Put a janitor on it to insure it gets
// cleaned up. The reader manager does not adopt them.
const XMLCh gDTDStr[] = { chLatin_D, chLatin_T, chLatin_D , chNull };
- DTDEntityDecl* declDTD = new (fGrammarPoolMemoryManager)
DTDEntityDecl(gDTDStr, false, fGrammarPoolMemoryManager);
+ DTDEntityDecl* declDTD = new (fMemoryManager) DTDEntityDecl(gDTDStr,
false, fMemoryManager);
declDTD->setSystemId(src.getSystemId());
Janitor<DTDEntityDecl> janDecl(declDTD);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]