diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-04-15 18:50:45 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-04-15 18:50:45 +0200 |
| commit | da4be95c903f0a7a442d0cf445d6229a978e8764 (patch) | |
| tree | 3ee92700cfd96fb41b5c1c6e53addf819bb2e9fd /src | |
| parent | cc91a71a9696ee0a8bfd4594b2eb9233720910f5 (diff) | |
Handle SIGHUP gracefully
Diffstat (limited to 'src')
| -rw-r--r-- | src/client_manager.hh | 2 | ||||
| -rw-r--r-- | src/main.cc | 7 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/client_manager.hh b/src/client_manager.hh index 3c964b2c..8501e3ea 100644 --- a/src/client_manager.hh +++ b/src/client_manager.hh @@ -49,9 +49,9 @@ public: Client& get_client(const Context& context); Client& get_client(const String& name); void set_client_name(Client& client, String name); + void remove_client(Client& client); private: - void remove_client(Client& client); String generate_name() const; std::vector<std::unique_ptr<Client>> m_clients; diff --git a/src/main.cc b/src/main.cc index bd5b43b2..927aebb0 100644 --- a/src/main.cc +++ b/src/main.cc @@ -134,8 +134,13 @@ void create_local_client(const String& init_command) }; UserInterface* ui = new LocalNCursesUI{}; - ClientManager::instance().create_client( + static Client* client = ClientManager::instance().create_client( std::unique_ptr<UserInterface>{ui}, init_command); + signal(SIGHUP, [](int) { + if (client) + ClientManager::instance().remove_client(*client); + client = nullptr; + }); } void signal_handler(int signal) |
