diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-08-06 21:51:44 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-08-06 21:51:44 +0100 |
| commit | 7a59a6d758b71f3f100f92ed42fc8c0a18f3b63d (patch) | |
| tree | 27808366a8f10a3e679e89769ddcae6b324778aa /src/buffer_manager.cc | |
| parent | c41870ec986c21810a632d3b02517e089896166a (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.cc | 11 |
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; + } } } |
