diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-03-02 13:30:11 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-03-02 13:30:11 +0000 |
| commit | 72dc8e6774b48666d4d09da21a603bd171b68b3e (patch) | |
| tree | a711a465bd51294e059ac8916eefe3d6bf32c8e0 /src/buffer_manager.cc | |
| parent | 068ca08b4ca193a2daa10c2232d71c06225602dd (diff) | |
Ensure ClientManager is always outliving the BufferManager
Diffstat (limited to 'src/buffer_manager.cc')
| -rw-r--r-- | src/buffer_manager.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index efd0c964..3398be34 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -16,11 +16,21 @@ struct name_not_unique : runtime_error name_not_unique() : runtime_error("buffer name is already in use") {} }; +BufferManager::BufferManager() +{ + kak_assert(ClientManager::has_instance()); +} + BufferManager::~BufferManager() { + kak_assert(ClientManager::has_instance()); + // delete remaining buffers while (not m_buffers.empty()) + { + ClientManager::instance().ensure_no_client_uses_buffer(*m_buffers.front().get()); delete m_buffers.front().get(); + } } void BufferManager::register_buffer(Buffer& buffer) @@ -62,8 +72,7 @@ void BufferManager::delete_buffer(Buffer& buffer) { return p.get() == &buffer; }); kak_assert(it != m_buffers.end()); - if (ClientManager::has_instance()) - ClientManager::instance().ensure_no_client_uses_buffer(buffer); + ClientManager::instance().ensure_no_client_uses_buffer(buffer); m_buffers.erase(it); m_buffer_trash.emplace_back(&buffer); @@ -106,8 +115,7 @@ void BufferManager::clear_buffer_trash() // Do that again, to be tolerant in some corner cases, where a buffer is // deleted during its creation - if (ClientManager::has_instance()) - ClientManager::instance().ensure_no_client_uses_buffer(*buffer); + ClientManager::instance().ensure_no_client_uses_buffer(*buffer); delete buffer; } |
