dustfly_2001 发表于 2010-1-13 20:24:11

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;
    }
}

modern 发表于 2010-1-13 23:12:32

没遇到过,
不过既然已经定位到死循环到析构函数,
还不好办,把堆栈贴出来,看到底锁在哪就成了。

freeeyes 发表于 2010-1-14 14:45:55

不太明白,你在ServerServiceHandler为什么要用到svc()?
而且里面的代码是

freeeyes 发表于 2010-1-14 14:46:58

ACE_Time_Value tv(1, 0);
   while (true)
{
      ACE_Message_Block *mb;
   if (this->getq (mb, &tv) == -1)
    {
       continue;
    }

你的队列为什么在这里循环?看不太懂你的想法。

dustfly_2001 发表于 2010-1-15 13:17:41

已经找到原因,handle_close里面将svc退出,但是svc退出又会导致handle_close被调用
页: [1]
查看完整版本: Linux下handle_close无法退出