diff --git a/libs/client_server/piclientserver_server.cpp b/libs/client_server/piclientserver_server.cpp index 7984d36f..4a6ec693 100644 --- a/libs/client_server/piclientserver_server.cpp +++ b/libs/client_server/piclientserver_server.cpp @@ -90,6 +90,18 @@ void PIClientServer::Server::listen(PINetworkAddress addr) { } +void PIClientServer::Server::closeAll() { + clients_mutex.lock(); + for (auto c: clients) { + c->aboutDelete(); + c->destroy(); + delete c; + } + clients.clear(); + clients_mutex.unlock(); +} + + void PIClientServer::Server::setMaxClients(int new_max_clients) { max_clients = new_max_clients; } diff --git a/libs/main/client_server/piclientserver_server.h b/libs/main/client_server/piclientserver_server.h index 37a380d1..784fa125 100644 --- a/libs/main/client_server/piclientserver_server.h +++ b/libs/main/client_server/piclientserver_server.h @@ -49,6 +49,8 @@ public: void listen(PINetworkAddress addr); void listenAll(ushort port) { listen({0, port}); } + void closeAll(); + int getMaxClients() const { return max_clients; } void setMaxClients(int new_max_clients); int clientsCount() const; diff --git a/libs/main/system/pisignals.cpp b/libs/main/system/pisignals.cpp index c4518dd8..57fdc146 100644 --- a/libs/main/system/pisignals.cpp +++ b/libs/main/system/pisignals.cpp @@ -60,6 +60,33 @@ void PISignals::grabSignals(PIFlags signals_) { } +void PISignals::releaseSignals(PIFlags signals_) { + if (signals_[PISignals::Interrupt]) signal(signalCode(PISignals::Interrupt), SIG_DFL); + if (signals_[PISignals::Illegal]) signal(signalCode(PISignals::Illegal), SIG_DFL); + if (signals_[PISignals::Abort]) signal(signalCode(PISignals::Abort), SIG_DFL); + if (signals_[PISignals::FPE]) signal(signalCode(PISignals::FPE), SIG_DFL); + if (signals_[PISignals::SegFault]) signal(signalCode(PISignals::SegFault), SIG_DFL); + if (signals_[PISignals::Termination]) signal(signalCode(PISignals::Termination), SIG_DFL); +#ifndef CC_VC + if (signals_[PISignals::UserDefined1]) signal(signalCode(PISignals::UserDefined1), SIG_DFL); + if (signals_[PISignals::UserDefined2]) signal(signalCode(PISignals::UserDefined2), SIG_DFL); +#endif +#ifndef WINDOWS + if (signals_[PISignals::Hangup]) signal(signalCode(PISignals::Hangup), SIG_DFL); + if (signals_[PISignals::Quit]) signal(signalCode(PISignals::Quit), SIG_DFL); + if (signals_[PISignals::Kill]) signal(signalCode(PISignals::Kill), SIG_DFL); + if (signals_[PISignals::BrokenPipe]) signal(signalCode(PISignals::BrokenPipe), SIG_DFL); + if (signals_[PISignals::Timer]) signal(signalCode(PISignals::Timer), SIG_DFL); + if (signals_[PISignals::ChildStopped]) signal(signalCode(PISignals::ChildStopped), SIG_DFL); + if (signals_[PISignals::Continue]) signal(signalCode(PISignals::Continue), SIG_DFL); + if (signals_[PISignals::StopProcess]) signal(signalCode(PISignals::StopProcess), SIG_DFL); + if (signals_[PISignals::StopTTY]) signal(signalCode(PISignals::StopTTY), SIG_DFL); + if (signals_[PISignals::StopTTYInput]) signal(signalCode(PISignals::StopTTYInput), SIG_DFL); + if (signals_[PISignals::StopTTYOutput]) signal(signalCode(PISignals::StopTTYOutput), SIG_DFL); +#endif +} + + void PISignals::raiseSignal(PISignals::Signal signal) { raise(signalCode(signal)); } @@ -90,7 +117,7 @@ int PISignals::signalCode(PISignals::Signal signal) { case PISignals::StopTTYInput: return SIGTTIN; case PISignals::StopTTYOutput: return SIGTTOU; #endif - default:; + default: break; } return 0; } @@ -121,13 +148,13 @@ PISignals::Signal PISignals::signalFromCode(int signal) { case SIGTTIN: return PISignals::StopTTYInput; case SIGTTOU: return PISignals::StopTTYOutput; #endif - default:; + default: break; } return PISignals::Termination; } void PISignals::signal_event(int signal) { - if (PISignals::ret_func == 0) return; + if (!PISignals::ret_func) return; PISignals::ret_func(PISignals::signalFromCode(signal)); } diff --git a/libs/main/system/pisignals.h b/libs/main/system/pisignals.h index d6064587..b9aad0e6 100644 --- a/libs/main/system/pisignals.h +++ b/libs/main/system/pisignals.h @@ -59,6 +59,7 @@ public: // slot is any function format "void(PISignals::Signal)" static void setSlot(SignalEvent slot) { ret_func = slot; } static void grabSignals(PIFlags signals_); + static void releaseSignals(PIFlags signals_); static void raiseSignal(PISignals::Signal signal); private: