Repository navigation
弱智能指针提升问题
#683
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
代码中关闭连接第一步是子线程删除文件描述符上所有感兴趣的事件,然后主线程删除_connection中的连接,最后子线程再从poller中删除文件描述符。我很好奇的是,什么情况下会发生TcpConnection空悬指针访问方法?这里我唯一能想到的场景是,在连接关闭事件发生到删除文件描述符上所有感兴趣事件之间文件描述符上又发生了其他事件。
在这个场景下,当连接关闭事件处理完成后,TcpConnection对象和Channel对象都已经被析构。接着处理文件描述符上的其他事件时,流程是subEpoller通知发生事件并设置给subLoop,subLoop调用相应Channel的handleEvent()方法,handleEvent()方法会尝试提升智能指针。在这个场景下Channel应该先于TcpConnection产生空悬指针访问的报错。因此我们只需要处理Channel空悬指针而不需要处理TcpConnection空悬指针。
不知道这个思考过程有没有错误的地方,希望得到大家的指正。
All reactions