Closed Hcoleyh closed 4 years ago
这是Server::handNewconn()函数中的代码, 这里的req_info被拷贝到EventLoop的pendingFunctors_中.
Server::handNewconn()
req_info
EventLoop
pendingFunctors_
shared_ptr<HttpData> req_info(new HttpData(loop, accept_fd)); req_info->getChannel()->setHolder(req_info); loop->queueInLoop(std::bind(&HttpData::newEvent, req_info));
在函数EventLoop::doPendingFunctors运行完function所绑定的Httpdata::newEvent后functors被析构, 那上面的req_info所指的对象在这里就被析构了吗? Httpdata析构函数close(fd), 那之后的请求怎么处理的
EventLoop::doPendingFunctors
function
Httpdata::newEvent
functors
Httpdata
close(fd)
void EventLoop::doPendingFunctors() { std::vector<Functor> functors; callingPendingFunctors_ = true; { MutexLockGuard lock(mutex_); functors.swap(pendingFunctors_); } for (size_t i = 0; i < functors.size(); ++i) functors[i](); callingPendingFunctors_ = false; }
@Hcoleyh 继续从HttpData::newEvent流程开始看的话,会绑定定时器的,最后被定时器管理起来
感谢🙏, 第一遍看代码时忽略了所有timer相关的代码.
这是
Server::handNewconn()
函数中的代码, 这里的req_info
被拷贝到EventLoop
的pendingFunctors_
中.在函数
EventLoop::doPendingFunctors
运行完function
所绑定的Httpdata::newEvent
后functors
被析构, 那上面的req_info
所指的对象在这里就被析构了吗?Httpdata
析构函数close(fd)
, 那之后的请求怎么处理的