summaryrefslogtreecommitdiff
path: root/src/buffer_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-05-21 20:30:24 +1000
committerMaxime Coste <mawww@kakoune.org>2018-05-21 20:30:24 +1000
commit56e2174cf6dad9c1e664877d27e3ca9c4ae2c512 (patch)
tree6a890c673077b3d0a05b35aaa69cac6e92f92458 /src/buffer_manager.cc
parentd4e36958f851000be58c427517fbf65aee68bd84 (diff)
Do not reuse m_buffer_trash to store dying buffers in ~BufferManager
Doing that clears m_buffer_trash, deleting buffers contained there, but we are not ready to have Buffer destructors running yet as we did not clear the ClientManager, meaning we might have free windows pointing to buffers in the buffer trash.
Diffstat (limited to 'src/buffer_manager.cc')
-rw-r--r--src/buffer_manager.cc7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc
index 4a6e779f..a26caa40 100644
--- a/src/buffer_manager.cc
+++ b/src/buffer_manager.cc
@@ -13,11 +13,10 @@ namespace Kakoune
BufferManager::~BufferManager()
{
- // Move buffers to m_buffer_trash to avoid running BufClose
- // hook while clearing m_buffers
- m_buffer_trash = std::move(m_buffers);
+ // Move buffers to avoid running BufClose with buffers remaining in that list
+ BufferList buffers = std::move(m_buffers);
- for (auto& buffer : m_buffer_trash)
+ for (auto& buffer : buffers)
buffer->on_unregistered();
// Make sure not clients exists