Dear Maintainer, here is a patch for your 2.8-2 package fixing this bug. Sorry for #856198, I thought it would help.
Regards, Fabrice Dagorn
Index: entropybroker-2.8/handle_client.cpp =================================================================== --- entropybroker-2.8.orig/handle_client.cpp +++ entropybroker-2.8/handle_client.cpp @@ -698,23 +698,35 @@ void main_loop(std::vector<client_t *> * // this way we go through each fd in the process_pipe_from_client_thread part // so that we detect closed fds int set = 0; + int failed = 0; for(unsigned int i=0; i<fds.size(); i++) { - if(fds.at(i).fd == clients -> at(loop) -> to_main[0] && fds.at(i).revents & POLLIN) { - set = 1; - break; + if(fds.at(i).fd == clients -> at(loop) -> to_main[0]) + { + if(fds.at(i).revents & POLLIN) + { + set = 1; + break; + } + if(fds.at(i).revents & (POLLERR|POLLHUP|POLLNVAL)) + { + failed = 1; + break; + } }; }; if(rc > 0 && set == 1 ) { if (process_pipe_from_client_thread(clients -> at(loop), &msgs_clients, &msgs_servers) == -1) - { - dolog(LOG_INFO, "main|connection with %s/%s lost", clients -> at(loop) -> host.c_str(), clients -> at(loop) -> type.c_str()); + failed = 1; + } + if(rc > 0 && failed == 1 ) { - user_map -> inc_misc_errors(clients -> at(loop) -> username); - gs -> inc_misc_errors(); + dolog(LOG_INFO, "main|connection with %s/%s lost", clients -> at(loop) -> host.c_str(), clients -> at(loop) -> type.c_str()); - delete_ids.push_back(&clients -> at(loop) -> th); - } + user_map -> inc_misc_errors(clients -> at(loop) -> username); + gs -> inc_misc_errors(); + + delete_ids.push_back(&clients -> at(loop) -> th); } }