summaryrefslogtreecommitdiff
path: root/src/buffer_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2019-11-22 20:29:55 +1100
committerMaxime Coste <mawww@kakoune.org>2019-11-22 20:29:55 +1100
commit22d9ffa63ac22d3823c41b4671e0565a92cf8619 (patch)
treeba007383462cce5a67634f81b24d9ccff10a1529 /src/buffer_manager.cc
parent82e53469049e3b6514aaa0c34e37742cf312c090 (diff)
Fix crash when deleting buffers in a BufClose hook
Diffstat (limited to 'src/buffer_manager.cc')
-rw-r--r--src/buffer_manager.cc7
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)