找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5049|回复: 4

ACE_GUARD引起的崩溃错误

[复制链接]
发表于 2007-12-24 23:27:15 | 显示全部楼层 |阅读模式
系统环境:
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上面也有人报告过类似的问题,但是没有人找到问题的原因。
 楼主| 发表于 2007-12-24 23:27:23 | 显示全部楼层
进一步的细节信息,
经过对release崩溃时候的跟踪发现,是在ACE_Guard类的acquire()方法里面出错的。
int acquire()
{
  return owner_ = lock_->acquire();
}
 楼主| 发表于 2007-12-24 23:27:29 | 显示全部楼层
这段函数最后调用应该就是EnterCriticalSection,cs结枸被改写或者在内存中不存在。
 楼主| 发表于 2007-12-24 23:27:35 | 显示全部楼层
但是这个函数是在一个ACE_Singleton中调用的,按道理不会被清理的呀?真是奇怪的问题,困扰了我一周了。
 楼主| 发表于 2007-12-24 23:27:43 | 显示全部楼层
问题找到了。压根和这个ACE_GUARD没有丝毫关系 - 前面的操作中,加解密操作导致了内存被破坏,造成这个错误。我逐个分隔了问题,最终发现了这个原因。看来这种错误,要多从内存操作入手来查找。奇怪的问题,经常有最简单的答案。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 21:12 , Processed in 0.020515 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表