From f79e37c5e646426e24b21f91bd8f9509635145f8 Mon Sep 17 00:00:00 2001 From: 3lswear Date: Wed, 23 Feb 2022 22:44:16 +0300 Subject: [PATCH] fix: fix FARA segfault !!! --- src/Server/Server.cpp | 21 ++++++++++++--------- src/Server/Server.hpp | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Server/Server.cpp b/src/Server/Server.cpp index 97e15d2..b703253 100644 --- a/src/Server/Server.cpp +++ b/src/Server/Server.cpp @@ -145,16 +145,17 @@ int Server::delete_client(std::map &client_map, int fd) return (ret); } } -int Server::delete_fd(std::map &map, int fd) +int Server::delete_fd(std::map &map, std::map::iterator &it) { int ret; - ret = epoll_ctl(_epoll_fd, EPOLL_CTL_DEL, fd, NULL); - delete map[fd]; - close(fd); - map.erase(fd); + ret = epoll_ctl(_epoll_fd, EPOLL_CTL_DEL, it->first, NULL); + // delete map[fd]; + delete it->second; + close(it->first); + map.erase(it++); DBOUT << WARNING << getDebugTime() << OKCYAN << " deleting fd " - << fd + << it->first << ENDL; return (ret); @@ -295,7 +296,8 @@ void Server::run(void) if (client_map[fd]->done) { delete_client(client_map, fd); - delete_fd(free_socket, fd); + std::map::iterator it = free_socket.find(fd); + delete_fd(free_socket, it); } else if (client_map[fd]->readyToSend()) { @@ -322,10 +324,11 @@ void Server::run(void) } } free_it = free_socket.begin(); - for (; free_it != free_socket.end(); free_it++) + while (free_it != free_socket.end()) { if (TimeToDie(free_it->second->last_modif, LIFE_TIME)) - delete_fd(free_socket, free_it->first); + delete_fd(free_socket, free_it); + ++free_it; } } DBOUT << RED << "end;" << ENDL; diff --git a/src/Server/Server.hpp b/src/Server/Server.hpp index 18d98cf..861aa95 100644 --- a/src/Server/Server.hpp +++ b/src/Server/Server.hpp @@ -54,7 +54,7 @@ class Server struct timeval last_modif; }t_tmp_fd; bool TimeToDie(struct timeval &last_modif, int lifeTime); - int delete_fd(std::map &map, int fd); + int delete_fd(std::map &map, std::map::iterator &it); std::map free_socket; public: