Commit d347e494 authored by Stefan Monnier's avatar Stefan Monnier

* 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.
parent d696b0d5
2009-03-27 Kevin Ryde <user42@zip.com.au>
* 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.
2009-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
* lisp.h (Fx_focus_frame): Declare.
......
......@@ -7184,17 +7184,23 @@ tty_read_avail_input (struct terminal *terminal,
{
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)
......
......@@ -3150,10 +3150,10 @@ Gpm-mouse can only be activated for one tty at a time. */)
}
void
close_gpm ()
close_gpm (int fd)
{
if (gpm_fd >= 0)
delete_gpm_wait_descriptor (gpm_fd);
if (fd >= 0)
delete_gpm_wait_descriptor (fd);
while (Gpm_Close()); /* close all the stack */
gpm_tty = NULL;
}
......@@ -3171,7 +3171,7 @@ DEFUN ("gpm-mouse-stop", Fgpm_mouse_stop, Sgpm_mouse_stop,
if (!tty || gpm_tty != tty)
return Qnil; /* Not activated on this terminal, nothing to do. */
close_gpm ();
close_gpm (gpm_fd);
return Qnil;
}
#endif /* HAVE_GPM */
......
......@@ -653,7 +653,7 @@ extern void delete_terminal P_ ((struct terminal *));
extern struct terminal *initial_terminal;
#ifdef HAVE_GPM
extern void close_gpm (void);
extern void close_gpm (int gpm_fd);
#endif
/* arch-tag: 33a00ecc-52b5-4186-a410-8801ac9f087d
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment