Mercurial > emacs
diff src/keyboard.c @ 102744:d69c45eb83b1
* keyboard.c (tty_read_avail_input): Don't treat a -1 return from
Gpm_GetEvent as an error that justifies closing the filedescriptor.
* term.c (close_gpm): Get the filedescriptor as a (new) parameter.
(Fgpm_mouse_stop): Pass that new parameter.
* termhooks.h (close_gpm): Adjust prototype.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 27 Mar 2009 16:14:23 +0000 |
parents | ae4c4cf5b7eb |
children | 3292a88d45ce |
line wrap: on
line diff
--- a/src/keyboard.c Fri Mar 27 15:58:16 2009 +0000 +++ b/src/keyboard.c Fri Mar 27 16:14:23 2009 +0000 @@ -7184,17 +7184,23 @@ { Gpm_Event event; struct input_event hold_quit; - int gpm; + int gpm, fd = gpm_fd; EVENT_INIT (hold_quit); hold_quit.kind = NO_EVENT; + /* gpm==1 if event received. + gpm==0 if the GPM daemon has closed the connection, in which case + Gpm_GetEvent closes gpm_fd and clears it to -1, which is why + we save it in `fd' so close_gpm can remove it from the + select masks. + gpm==-1 if a protocol error or EWOULDBLOCK; the latter is normal. */ while (gpm = Gpm_GetEvent (&event), gpm == 1) { nread += handle_one_term_event (tty, &event, &hold_quit); } - if (gpm < 0) + if (gpm == 0) /* Presumably the GPM daemon has closed the connection. */ - close_gpm (); + close_gpm (fd); if (hold_quit.kind != NO_EVENT) kbd_buffer_store_event (&hold_quit); if (nread)