Subject: Re: bug#407: gpm server stop making emacs abort()

From: Sven Joachim <[email-masked]>
Date: Tue, 01 Jul 2008 22:43:40 +0200

[ Stefan, it seems you inadvertently forgot to CC the bug submitter,
  which is why you did not get an answer from him.]

On 2008-06-14 00:18 +0200, Stefan Monnier wrote:

>> If running with
>> 	(gpm-mouse-mode 1)
>> and if you stop the gpm server, then emacs dies with
>> 	Fatal error (6)Aborted

I also saw that. When gpm was upgraded and restarted, Emacs aborted.

>> Output from "bt full" below; xbacktrace printed nothing at all.
>
>> The backtrace shows it at the abort() under the EBADF case in
>> wait_reading_process_output().  I think when Gpm_GetEvent gets an eof
>> from the server it closes gpm_fd; maybe that's the bad fd in question.
>
> I can't test it right now.  Does the patch below help?
>
>
>         Stefan
>
>
> --- keyboard.c.~1.959.~	2008-06-03 02:14:30.000000000 -0400
> +++ keyboard.c	2008-06-13 18:17:35.000000000 -0400
> @@ -7189,6 +7189,8 @@
>        while (gpm = Gpm_GetEvent (&event), gpm == 1) {
>  	  nread += handle_one_term_event (tty, &event, &hold_quit);
>        }
> +      if (gpm < 0)
> +	delete_gpm_wait_descriptor (gpm_fd);
>        if (hold_quit.kind != NO_EVENT)
>  	  kbd_buffer_store_event (&hold_quit);
>        if (nread)

Works fine for me.

Regards,
        Sven