summaryrefslogtreecommitdiff
path: root/src/buffer_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-08-06 21:51:44 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-08-06 21:51:44 +0100
commit7a59a6d758b71f3f100f92ed42fc8c0a18f3b63d (patch)
tree27808366a8f10a3e679e89769ddcae6b324778aa /src/buffer_manager.cc
parentc41870ec986c21810a632d3b02517e089896166a (diff)
ensure a buffer is not referenced a second time, just before actually deleting it
It can happen in certain case that a buffer gets referenced after it gets moved to the trash, for example when it gets deleted during its construction (due to BufCreate hook for example).
Diffstat (limited to 'src/buffer_manager.cc')
-rw-r--r--src/buffer_manager.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc
index e468a0d9..dc4c82bf 100644
--- a/src/buffer_manager.cc
+++ b/src/buffer_manager.cc
@@ -114,7 +114,16 @@ void BufferManager::backup_modified_buffers()
void BufferManager::clear_buffer_trash()
{
while (not m_buffer_trash.empty())
- delete m_buffer_trash.back().get();
+ {
+ Buffer* buffer = m_buffer_trash.back().get();
+
+ // 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);
+
+ delete buffer;
+ }
}
}