Do not add window pointing to deleted buffers in the free window list

Fixes #2975
This commit is contained in:
Maxime Coste 2019-06-16 19:04:06 +10:00
parent 9d52822702
commit 5888e23e02

View File

@ -137,6 +137,7 @@ void ClientManager::remove_client(Client& client, bool graceful, int status)
WindowAndSelections ClientManager::get_free_window(Buffer& buffer) WindowAndSelections ClientManager::get_free_window(Buffer& buffer)
{ {
kak_assert(contains(BufferManager::instance(), &buffer));
auto it = find_if(m_free_windows | reverse(), auto it = find_if(m_free_windows | reverse(),
[&](const WindowAndSelections& ws) [&](const WindowAndSelections& ws)
{ return &ws.window->buffer() == &buffer; }); { return &ws.window->buffer() == &buffer; });
@ -153,6 +154,9 @@ WindowAndSelections ClientManager::get_free_window(Buffer& buffer)
void ClientManager::add_free_window(std::unique_ptr<Window>&& window, SelectionList selections) void ClientManager::add_free_window(std::unique_ptr<Window>&& window, SelectionList selections)
{ {
if (not contains(BufferManager::instance(), &window->buffer()))
return;
window->clear_display_buffer(); window->clear_display_buffer();
m_free_windows.push_back({std::move(window), std::move(selections)}); m_free_windows.push_back({std::move(window), std::move(selections)});
} }