I'm running Xerces 2.2.0 (from HP's VMS freeware site) on OpenVMS 7.3,
using C++ V6.3-020. 

I can create an instance of the XercesDOMParser, manipulate it, (parse,
get documents, find nodes, add them, etc) delete it, rinse, repeat, etc,
as often as I want, as long as there's only one instance at any given
time within a process.

Creating two or more instance of the parser at the same time within one
process causes all sorts of grief. Specifically, when I create the
second instance, somewhere something overwrites memory, and I get
unusually unpredictable results, like member variables in unrelated
classes being overwritten, etc. Seems it's allocating memory that's
already been allocated to other variables and classes. For example, an
integer member variable of an unrelated class gets changed from 0 to
522342, and later on to something else. Changing the value of the
integer causes access violations in the next Xerces call.

As best as I can tell, this behaviour occurs somewhere within the
constructor of the XercesDOMParser, but I can't for the life me figure
out why or where. I'm by no means a VMS expert, but those who are also
cannot figure out where or why.

Unfortunately this behaviour occurs only on VMS. Creating multiple
simultaneous instances on HPUX and Windows works fine.

Code looks as follows (with error checking taken out):

//constructor
CXml::CXml() {
        XMLPlatformUtils::Initialize();
        this->m_parser = XercesDOMParser; //the offending line, only on
the second instance.
        //set various options
}
//destructor
CXml::~CXml() {
        delete this->m_parser;
        XMLPlatformUtils::Terminate();
}

At this point I'm ready to blame the compiler... except that I've got
15K+ lines of code that run just fine. Any ideas?

cheers
mike


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to