Open dwangxxx opened 3 years ago
你好,我在看您第五版的代码时,下面这段代码有点疑惑:
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错误,这应该是之前版本会出现吧?使用智能指针的版本应该不会出现这种问题吧?
之前的版本也不会出现,只是说要防止这种情况
你好,我在看您第五版的代码时,下面这段代码有点疑惑:
上面写会出现double free错误,这应该是之前版本会出现吧?使用智能指针的版本应该不会出现这种问题吧?