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)