ACE_GUARD引起的崩溃错误
系统环境:windows xp/2003,ACE 5.5.0版本
现象:
release条件编译的程序,在进入了使用ACE_GUARD宏的函数后崩溃,每次都如此。
调用:
int CServerTask::svc(void)
{
//* \brief 进行消息队列的处理
ACE_Message_Block *msg_blk = 0;
while(true)
{
if(getq (msg_blk) == -1)
{
//错误,退出,否则将阻塞
break;
}
//判断网络是否处于连接状态
bool bConn = SERVER_CONNECTOR::instance()->is_connected(); //每次都崩溃
}
}
bool CServerSyncConnector::is_connected()
{
ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex,guard,m_lock,false);
//报告存取违例,程序退出
return (fConn== CONN_READY);
}
在google上面也有人报告过类似的问题,但是没有人找到问题的原因。 进一步的细节信息,
经过对release崩溃时候的跟踪发现,是在ACE_Guard类的acquire()方法里面出错的。
int acquire()
{
return owner_ = lock_->acquire();
} 这段函数最后调用应该就是EnterCriticalSection,cs结枸被改写或者在内存中不存在。 但是这个函数是在一个ACE_Singleton中调用的,按道理不会被清理的呀?真是奇怪的问题,困扰了我一周了。 问题找到了。压根和这个ACE_GUARD没有丝毫关系 - 前面的操作中,加解密操作导致了内存被破坏,造成这个错误。我逐个分隔了问题,最终发现了这个原因。看来这种错误,要多从内存操作入手来查找。奇怪的问题,经常有最简单的答案。
页:
[1]