wallaceoc80
June 27th, 2007, 11:30 AM
Hi, I have a multi-threaded program that every so often reports an EXCEPTION_ACCESS_VIOLATION error and gives the follow stack trace:
+++ Reason: Xi.exe caused an EXCEPTION_ACCESS_VIOLATION in module ntdll.dll at 001B:7C918FEA, RtlpWaitForCriticalSection()+91 byte(s)
+++
+++ Registers:
+++ EAX=00000000 EBX=00000000 ECX=00004C30 EDX=0E111F18 ESI=0E111F08
+++ EDI=00000000 EBP=0012F890 ESP=0012F81C EIP=7C918FEA FLG=00010246
+++ CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000
+++
+++ Stack Trace:
+++ 001B:7C918FEA (0x00111F08 0x3AC08CF1 0x0E111F08 0x0E111F08) ntdll.dll, RtlpWaitForCriticalSection()+91 byte(s)
+++ 001B:7C90104B (0x0012F8D0 0x0012F8D8 0x3ADFB379 0x0E111F08) ntdll.dll, RtlEnterCriticalSection()+70 byte(s)
+++ 001B:3AC06EC9 (0x0E111F08 0x00000001 0x0E111F08 0x00000000) XiGridOCX.dll, rdgLock<rdgMutex>::rdgLock<rdgMutex>()+25 byte(s), Z:\fiet\FIET_ETLIB\Source\rdgLib/rdgMutex.h, line 165+25 byte(s)
I think at the time the app is just trying to get a lock on an object. The release method in LazyXML::XMLDataImpl looks like this:
void release()
{
bool toDelete = false;
{
rdgLock<rdgMutex> lock(mutex_);
if (--refCount_ == 0)
toDelete = true;
}
if (toDelete)
delete this;
}
and the rdgLock object looks like this:
rdgLock(const T & resource)
: resource_(resource)
{ resource_.Lock(); }
I can't think of any reason why this would be happening and like I said it happens quite rarely.
Any ideas would be appreciated...
Thanks,
Wallace
+++ Reason: Xi.exe caused an EXCEPTION_ACCESS_VIOLATION in module ntdll.dll at 001B:7C918FEA, RtlpWaitForCriticalSection()+91 byte(s)
+++
+++ Registers:
+++ EAX=00000000 EBX=00000000 ECX=00004C30 EDX=0E111F18 ESI=0E111F08
+++ EDI=00000000 EBP=0012F890 ESP=0012F81C EIP=7C918FEA FLG=00010246
+++ CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000
+++
+++ Stack Trace:
+++ 001B:7C918FEA (0x00111F08 0x3AC08CF1 0x0E111F08 0x0E111F08) ntdll.dll, RtlpWaitForCriticalSection()+91 byte(s)
+++ 001B:7C90104B (0x0012F8D0 0x0012F8D8 0x3ADFB379 0x0E111F08) ntdll.dll, RtlEnterCriticalSection()+70 byte(s)
+++ 001B:3AC06EC9 (0x0E111F08 0x00000001 0x0E111F08 0x00000000) XiGridOCX.dll, rdgLock<rdgMutex>::rdgLock<rdgMutex>()+25 byte(s), Z:\fiet\FIET_ETLIB\Source\rdgLib/rdgMutex.h, line 165+25 byte(s)
I think at the time the app is just trying to get a lock on an object. The release method in LazyXML::XMLDataImpl looks like this:
void release()
{
bool toDelete = false;
{
rdgLock<rdgMutex> lock(mutex_);
if (--refCount_ == 0)
toDelete = true;
}
if (toDelete)
delete this;
}
and the rdgLock object looks like this:
rdgLock(const T & resource)
: resource_(resource)
{ resource_.Lock(); }
I can't think of any reason why this would be happening and like I said it happens quite rarely.
Any ideas would be appreciated...
Thanks,
Wallace