WebServer
WebServer copied to clipboard
double free错误
你好,我在看您第五版的代码时,下面这段代码有点疑惑:
oid RequestData::handleConn()
{
if (!error)
{
if (events != 0)
{
// 一定要先加时间信息,否则可能会出现刚加进去,下个in触发来了,然后分离失败后,又加入队列,最后超时被删,然后正在线程中进行的任务出错,double free错误。
// 新增时间信息
int timeout = 2000;
if (keep_alive)
timeout = 5 * 60 * 1000;
isAbleRead = false;
isAbleWrite = false;
Epoll::add_timer(shared_from_this(), timeout);
if ((events & EPOLLIN) && (events & EPOLLOUT))
{
events = __uint32_t(0);
events |= EPOLLOUT;
}
events |= (EPOLLET | EPOLLONESHOT);
__uint32_t _events = events;
events = 0;
if (Epoll::epoll_mod(fd, shared_from_this(), _events) < 0)
{
printf("Epoll::epoll_mod error\n");
}
}
else if (keep_alive)
{
events |= (EPOLLIN | EPOLLET | EPOLLONESHOT);
int timeout = 5 * 60 * 1000;
isAbleRead = false;
isAbleWrite = false;
Epoll::add_timer(shared_from_this(), timeout);
__uint32_t _events = events;
events = 0;
if (Epoll::epoll_mod(fd, shared_from_this(), _events) < 0)
{
printf("Epoll::epoll_mod error\n");
}
}
}
}
上面写会出现double free错误,这应该是之前版本会出现吧?使用智能指针的版本应该不会出现这种问题吧?
之前的版本也不会出现,只是说要防止这种情况