Terminal: Fix double-freed memory
The base problem was, that every time I opened KeyMap while a Terminal
was opened too, it eventually crashed. I followed along the trace and
found that the code first frees the keymap and keymapchars in the
_UpdateKeymap() and then calls SetKeymap for every tab opened which
also tries to free the old keymap and keymapchars.
TermWindow's _UpdateKeymap() method first frees the old keymap and keymapchars:
delete fKeymap;
delete[] fKeymapChars;
and then calls SetKeyMap for every tab which tries to free the old keymap and keymapchars again:
for (int32 i = 0; i < fTabView->CountTabs(); i++) {
TermView* view = _TermViewAt(i);
view->SetKeymap(fKeymap, fKeymapChars);
}
So TermView simply is not responsible for the memory, it merily has a pointer.
Fixes #15502.
Change-Id: Id08c863d811fbb72cce9be4c8fff2d3eb5f0064f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2037
Reviewed-by: Stephan Aßmus <[email protected]>
This commit is contained in:
committed by
Adrien Destugues
parent
eeb89ccd8b
commit
a02f7c7bae
@@ -732,9 +732,6 @@ TermView::SetEncoding(int encoding)
|
|||||||
void
|
void
|
||||||
TermView::SetKeymap(const key_map* keymap, const char* chars)
|
TermView::SetKeymap(const key_map* keymap, const char* chars)
|
||||||
{
|
{
|
||||||
delete fKeymap;
|
|
||||||
delete[] fKeymapChars;
|
|
||||||
|
|
||||||
fKeymap = keymap;
|
fKeymap = keymap;
|
||||||
fKeymapChars = chars;
|
fKeymapChars = chars;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user