Open
Description
net/TcpSession.cpp:
std::shared_ptr<TcpConnection> getConnectionPtr()
{
if (tmpConn_.expired())
return NULL;
return tmpConn_.lock();
}
可能存在这样的竞态条件:
线程 A 调用 expired() 判断为 false
线程 B 恰好在此时销毁了 shared_ptr
线程 A 调用 lock() 得到的是空指针
感觉只用lock()就行了:
std::shared_ptr<TcpConnection> getConnectionPtr()
{
std::shared_ptr<TcpConnection> conn = tmpConn_.lock();
if (!conn)
{
return nullptr;
}
return conn;
}
Metadata
Metadata
Assignees
Labels
No labels