Linux下handle_close无法退出
当客户端连接到上面的服务器类后,成功启动svc线程,这时如果客户端断开连接,进入handle_close函数,则执行到delete this时,会在析构函数中死循环,一直出不来,导致handle_close无法退出,不启动svc则无该问题Windows下没有这种问题
请教牛人帮忙解释一下是啥问题啊??
class ServerServiceHandler : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_MT_SYNCH>
{
.......
};
int ServerServiceHandler::open(void*)
{
activate(THR_NEW_LWP, 1);
......
}
int ServerServiceHandler::handle_close(ACE_HANDLE h, ACE_Reactor_Mask mask)
{
.....
delete this;
.....
}
int ServerServiceHandler::svc()
{
ACE_Time_Value tv(1, 0);
while (true)
{
ACE_Message_Block *mb;
if (this->getq (mb, &tv) == -1)
{
continue;
}
} 没遇到过,
不过既然已经定位到死循环到析构函数,
还不好办,把堆栈贴出来,看到底锁在哪就成了。 不太明白,你在ServerServiceHandler为什么要用到svc()?
而且里面的代码是 ACE_Time_Value tv(1, 0);
while (true)
{
ACE_Message_Block *mb;
if (this->getq (mb, &tv) == -1)
{
continue;
}
你的队列为什么在这里循环?看不太懂你的想法。 已经找到原因,handle_close里面将svc退出,但是svc退出又会导致handle_close被调用
页:
[1]