diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-07-10 16:01:33 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-07-10 16:34:16 +0100 |
| commit | 530ecf212eedce7ae62c185873ae42033eeee925 (patch) | |
| tree | b968beadab5905f1e43ad450ce94e3d6ddd48ed3 /src/buffer_manager.cc | |
| parent | 6bcfc7268f9a0b642cdda802b072034f587c5370 (diff) | |
Ensure buffer create/close hooks are run at appropriate times
They used to be ran before the buffer was added to the buffer list
we now run them afterwards.
Diffstat (limited to 'src/buffer_manager.cc')
| -rw-r--r-- | src/buffer_manager.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index e743bff0..98dfc7f1 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -22,6 +22,9 @@ BufferManager::~BufferManager() // hook while clearing m_buffers m_buffer_trash = std::move(m_buffers); + for (auto& buffer : m_buffer_trash) + buffer->on_unregistered(); + // Make sure not clients exists ClientManager::instance().clear(); } @@ -37,9 +40,12 @@ Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags, throw name_not_unique(); } - m_buffers.emplace(m_buffers.begin(), new Buffer{std::move(name), flags, - data, fs_timestamp}); - return m_buffers.front().get(); + m_buffers.emplace(m_buffers.begin(), + new Buffer{std::move(name), flags, data, fs_timestamp}); + auto& buffer = *m_buffers.front(); + buffer.on_registered(); + + return &buffer; } void BufferManager::delete_buffer(Buffer& buffer) @@ -48,10 +54,13 @@ void BufferManager::delete_buffer(Buffer& buffer) { return p.get() == &buffer; }); kak_assert(it != m_buffers.end()); + ClientManager::instance().ensure_no_client_uses_buffer(buffer); m_buffer_trash.emplace_back(std::move(*it)); m_buffers.erase(it); + + buffer.on_unregistered(); } Buffer* BufferManager::get_buffer_ifp(StringView name) |
