You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
代码中关闭连接第一步是子线程删除文件描述符上所有感兴趣的事件,然后主线程删除_connection中的连接,最后子线程再从poller中删除文件描述符。我很好奇的是,什么情况下会发生TcpConnection空悬指针访问方法?这里我唯一能想到的场景是,在连接关闭事件发生到删除文件描述符上所有感兴趣事件之间文件描述符上又发生了其他事件。
在这个场景下,当连接关闭事件处理完成后,TcpConnection对象和Channel对象都已经被析构。接着处理文件描述符上的其他事件时,流程是subEpoller通知发生事件并设置给subLoop,subLoop调用相应Channel的handleEvent()方法,handleEvent()方法会尝试提升智能指针。在这个场景下Channel应该先于TcpConnection产生空悬指针访问的报错。因此我们只需要处理Channel空悬指针而不需要处理TcpConnection空悬指针。
不知道这个思考过程有没有错误的地方,希望得到大家的指正。
Beta Was this translation helpful? Give feedback.
All reactions