View Single Post
  #3 (permalink)  
Old 05-19-2004
marksj marksj is offline
Registered User
 
Name: John Marks
Organization: HP
Project: RGS Software
 
Join Date: May 2004
Location: Fort Collins, CO
Posts: 7
Hi Bernard,

I've checked our source code, and we never use IceUtil::Mutex, but rather IceUtil::RecMutex. As far as I can tell, we always use recursive mutex.

So, here is the stack trace. It is stopping in the system assert caused by the assert mentioned previously in IceUtil/Mutex.h. Here is the call stack:

- msvcr71d.dll!_assert(const char * expr=0x10119630, const char * filename=0x1011964c, unsigned int lineno=140) Line 306 C
- ice13d.dll!IceUtil::Monitor<IceUtil::Mutex>::lock( ) + 0x92
- ice13d.dll!IceInternal::decRef() + 0xa220
- ice13d.dll!Ice:perator<() + 0x37c
- ice13d.dll!Ice:perator<() + 0x5aba
- rwsender.exe!Sender::SenderImpl::~SenderImpl() Line 83 C++
- rwsender.exe!Sender::SenderImpl::`vbase destructor'() + 0xf C++
...

The Sender::SenderImpl::~SenderImpl() contains
{
IceUtil::RecMutex::Lock siLock(*this);
_adapter->remove(_sdiId);
}

The SenderImp class inherits from IceUtil::RecMutex, so when we lock our routines, we just use *this, as shown in the destructor.

So, as mentioned before, if I use the 1.1.0 ICE libraries, all is well. The only real IceUtil::Mutex variables that I can find are those used within the Ice code - as shown above in ice13d.d used in the Monitor.

Any more ideas?

Thanks,
John
__________________
John Marks
Hewlett-Packard (www.hp.com)
Remote Graphics Software
Reply With Quote