summaryrefslogtreecommitdiff
path: root/src/terminal.c
diff options
context:
space:
mode:
authorKaroly Lorentey <lorentey@elte.hu>2006-05-20 17:12:43 +0000
committerKaroly Lorentey <lorentey@elte.hu>2006-05-20 17:12:43 +0000
commitab797f65de1b82ff9e96aab6989976a152385048 (patch)
tree2622d33ce1a69cac40e5b31fa0f7f9e1faa8998b /src/terminal.c
parent8cbd7bed2db718a63ed37182c566f9e059925c71 (diff)
downloademacs-ab797f65de1b82ff9e96aab6989976a152385048.tar.gz
emacs-ab797f65de1b82ff9e96aab6989976a152385048.tar.bz2
emacs-ab797f65de1b82ff9e96aab6989976a152385048.zip
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) <Vsuspend_tty_functions, Vresume_tty_functions>: Doc update. * src/termhooks.h (terminal) <name>: 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) <terminal>: Move member earlier in the struct. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-565
Diffstat (limited to 'src/terminal.c')
-rw-r--r--src/terminal.c10
1 files changed, 5 insertions, 5 deletions
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);