From ab797f65de1b82ff9e96aab6989976a152385048 Mon Sep 17 00:00:00 2001 From: Karoly Lorentey Date: Sat, 20 May 2006 17:12:43 +0000 Subject: Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak. * src/frame.c (make_terminal_frame): Don't create frames on a terminal that is being deleted. * src/xfns.c (Fx_create_frame, x_create_tip_frame): Ditto. * src/keyboard.c (tty_read_avail_input): Don't read from a terminal that is being deleted. * src/term.c (get_named_tty): Abort if tty name is NULL. Simplify accordingly. * src/term.c (Ftty_type): Return nil if terminal is not on a tty instead of throwing an error. Doc update. * src/term.c (init_tty): Set name before calling `get_named_tty'. * src/term.c (delete_tty): Let delete_terminal delete the frames. Plug memory leak caused by tty->name. Remove reference to `deleting_tty'. * src/term.c (syms_of_term) : Doc update. * src/termhooks.h (terminal) : Explain why identifying terminals by name is a bad idea. * src/terminal.c (delete_terminal): Doc update. * src/xterm.c (XTread_socket): Disable loop on all X displays. * src/xterm.c (x_delete_display): Doc update to reflect changes in delete_terminal. * src/xterm.c (x_delete_terminal): Don't set terminal->deleted and let delete_terminal delete the frames on the terminal. * src/xterm.h (x_display_info) : Move member earlier in the struct. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-565 --- src/terminal.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/terminal.c') diff --git a/src/terminal.c b/src/terminal.c index db75e16b6cf..f3f0a178c8d 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -270,7 +270,8 @@ mark_terminals (void) } -/* Remove a terminal from the terminal list and free its memory. */ +/* Low-level function to close all frames on a terminal, remove it + from the terminal list and free its memory. */ void delete_terminal (struct terminal *terminal) @@ -278,14 +279,13 @@ delete_terminal (struct terminal *terminal) struct terminal **tp; Lisp_Object tail, frame; - /* Protect against recursive calls. Fdelete_frame calls us back - when we delete our last frame. */ + /* Protect against recursive calls. Fdelete_frame calls the + delete_terminal_hook when we delete our last frame. */ if (terminal->deleted) return; terminal->deleted = 1; - /* Check for and close live frames that are still on this - terminal. */ + /* Check for live frames that are still on this terminal. */ FOR_EACH_FRAME (tail, frame) { struct frame *f = XFRAME (frame); -- cgit v1.2.1