diff options
| author | Maxime Coste <mawww@kakoune.org> | 2019-11-22 20:29:55 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2019-11-22 20:29:55 +1100 |
| commit | 22d9ffa63ac22d3823c41b4671e0565a92cf8619 (patch) | |
| tree | ba007383462cce5a67634f81b24d9ccff10a1529 /src/buffer_manager.cc | |
| parent | 82e53469049e3b6514aaa0c34e37742cf312c090 (diff) | |
Fix crash when deleting buffers in a BufClose hook
Diffstat (limited to 'src/buffer_manager.cc')
| -rw-r--r-- | src/buffer_manager.cc | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 30056525..d8d4da26 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -48,15 +48,16 @@ Buffer* BufferManager::create_buffer(String name, Buffer::Flags flags, void BufferManager::delete_buffer(Buffer& buffer) { auto it = find_if(m_buffers, [&](auto& p) { return p.get() == &buffer; }); - kak_assert(it != m_buffers.end()); - - buffer.on_unregistered(); + if (it == m_buffers.end()) // we might be trying to recursively delete this buffer + return; m_buffer_trash.emplace_back(std::move(*it)); m_buffers.erase(it); if (ClientManager::has_instance()) ClientManager::instance().ensure_no_client_uses_buffer(buffer); + + buffer.on_unregistered(); } Buffer* BufferManager::get_buffer_ifp(StringView name) |
