summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buffer_manager.cc2
-rw-r--r--src/client_manager.cc13
-rw-r--r--src/client_manager.hh2
-rw-r--r--src/main.cc1
4 files changed, 12 insertions, 6 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc
index d4e88b6c..30056525 100644
--- a/src/buffer_manager.cc
+++ b/src/buffer_manager.cc
@@ -21,7 +21,7 @@ BufferManager::~BufferManager()
// Make sure not clients exists
if (ClientManager::has_instance())
- ClientManager::instance().clear();
+ ClientManager::instance().clear(true);
}
Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags,
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 9dd32df5..ca32678f 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -14,13 +14,18 @@ namespace Kakoune
ClientManager::ClientManager() = default;
ClientManager::~ClientManager()
{
- clear();
+ clear(true);
}
-void ClientManager::clear()
+void ClientManager::clear(bool disconnect_clients)
{
- while (not m_clients.empty())
- remove_client(*m_clients.front(), true, 0);
+ if (disconnect_clients)
+ {
+ while (not m_clients.empty())
+ remove_client(*m_clients.front(), true, 0);
+ }
+ else
+ m_clients.clear();
m_client_trash.clear();
for (auto& window : m_free_windows)
diff --git a/src/client_manager.hh b/src/client_manager.hh
index 104d2124..7d92ed7e 100644
--- a/src/client_manager.hh
+++ b/src/client_manager.hh
@@ -27,7 +27,7 @@ public:
bool empty() const { return m_clients.empty(); }
size_t count() const { return m_clients.size(); }
- void clear();
+ void clear(bool exit);
void ensure_no_client_uses_buffer(Buffer& buffer);
diff --git a/src/main.cc b/src/main.cc
index 6b533003..d115ef2f 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -801,6 +801,7 @@ int run_server(StringView session, StringView server_init,
if (fork_server_to_background())
{
+ ClientManager::instance().clear(false);
String session = server.session();
server.close_session(false);
throw convert_to_client_mode{ std::move(session), std::move(client_name), std::move(buffer_name), std::move(selections) };