summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-03-03 13:55:35 +0000
committerMaxime Coste <frrrwww@gmail.com>2016-03-03 14:05:07 +0000
commitb5b5b82c70533c833396fbe490e860d4820ca022 (patch)
tree63c2a604017fe65bdde1f126715716f8193b7f7d /src
parentf16bb36f41432c0938954d0e42f57eedf8ed0287 (diff)
destroy buffer manager first but clear clients before destroying buffers.
Fixes #612
Diffstat (limited to 'src')
-rw-r--r--src/buffer_manager.cc3
-rw-r--r--src/client_manager.cc6
-rw-r--r--src/client_manager.hh2
-rw-r--r--src/main.cc4
4 files changed, 12 insertions, 3 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc
index 9568c33e..bb9f7902 100644
--- a/src/buffer_manager.cc
+++ b/src/buffer_manager.cc
@@ -18,7 +18,8 @@ struct name_not_unique : runtime_error
BufferManager::~BufferManager()
{
- kak_assert(not ClientManager::has_instance());
+ // Make sure not clients exists
+ ClientManager::instance().clear();
// delete remaining buffers
while (not m_buffers.empty())
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 675d2e66..b625fdc5 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -14,6 +14,12 @@ namespace Kakoune
ClientManager::ClientManager() = default;
ClientManager::~ClientManager()
{
+ clear();
+}
+
+void ClientManager::clear()
+{
+ m_free_windows.clear();
// So that clients destructor find the client manager empty
// so that local UI does not fork.
ClientList clients = std::move(m_clients);
diff --git a/src/client_manager.hh b/src/client_manager.hh
index cd7f12bf..c6ba1c35 100644
--- a/src/client_manager.hh
+++ b/src/client_manager.hh
@@ -33,6 +33,8 @@ public:
bool empty() const { return m_clients.empty(); }
size_t count() const { return m_clients.size(); }
+ void clear();
+
void ensure_no_client_uses_buffer(Buffer& buffer);
WindowAndSelections get_free_window(Buffer& buffer);
diff --git a/src/main.cc b/src/main.cc
index 1b6f38cb..b1c5a7df 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -463,8 +463,8 @@ int run_server(StringView session, StringView init_command,
HighlighterRegistry highlighter_registry;
DefinedHighlighters defined_highlighters;
FaceRegistry face_registry;
- BufferManager buffer_manager;
ClientManager client_manager;
+ BufferManager buffer_manager;
register_options();
register_env_vars();
@@ -590,8 +590,8 @@ int run_filter(StringView keystr, StringView commands, ConstArrayView<StringView
ShellManager shell_manager;
CommandManager command_manager;
RegisterManager register_manager;
- BufferManager buffer_manager;
ClientManager client_manager;
+ BufferManager buffer_manager;
register_options();
register_env_vars();