Hi ,
Is XPathEvaluator::initialize() supposed to be
thread-safe if you call it in each thread after
XMLPlatformUtils::Initialize() similar to how SImpleXPathAPI does it? I
find that if I try to run an application that is essentially SimpleXPathAPI
logic being called independently for each one within a set of multiple
threads (no, they are NOT using the same objects, that I know of), if I try
it with more than 2 threads, I end up with a protection exception on a call
stack that look like this:
0C3239C0 +00000072 XMLString::transcode(const char* const,unsigned
short* const
0C3239C0
+00000072 *PATHNAM Exception
0C843C98 0B624018 +000001C2 doXercesTranscode(const
char*,unsigned int,int,vector<unsign
0B624018
+000001C2 *PATHNAM Call
0C843BB0 0B6245E8 +0000015A
doTranscodeFromLocalCodePage(const char*,unsigned int,int,ve
0B6245E8
+0000015A *PATHNAM Call
0C8439D8 0B626A40 +00000164
XalanDOMString::append(const char*,unsigned int)
0B626A40
+00000164 *PATHNAM Call
0C8438F8 0B625810 +0000009A
XalanDOMString::XalanDOMString(const char*,unsigned int)
0B625810
+0000009A *PATHNAM Call
0C8437C8 0B649C10 +00000082
DOMStringHelperInitialize()
0B649C10
+00000082 *PATHNAM Call
0C8436F0 0B65D388 +000000A8
PlatformSupportInit::PlatformSupportInit()
0B65D388
+000000A8 *PATHNAM Call
0C843618 0B7DB0D0 +00000078 XPathInit::XPathInit()
0B7DB0D0
+00000078 *PATHNAM Call
0C843540 0B7BB1C0 +00000092
XPathEvaluator::initialize()
0B7BB1C0
+00000092 *PATHNAM
One question I have is: what is the transcode trying to work on?
XPathEvaluator::initialize() never had any arguments from anything I passed
into it.
Is it possible that DOMStringHelperInitialize() is trying to work
with something global that is not set up separately for each thread and
then trying to do a TranscodeFromLocalCodePage on it?
How does one assure that the XPathEvaluator::initialize() is
properly set up for multi-threading?
Thanks,
Suzanne