GNU bug report logs - #3225
session manager hang due to block on ice_fd (failure to check for EINTR in select)

Previous Next

Package: emacs;

Reported by: Karl Tomlinson <bugs+emacs <at> karlt.net>

Date: Tue, 5 May 2009 21:10:04 UTC

Severity: normal

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Glenn Morris <rgm <at> gnu.org>
To: Karl Tomlinson <bugs+emacs <at> karlt.net>
Cc: 3225 <at> debbugs.gnu.org
Subject: bug#3225: session manager hang due to block on ice_fd (failure to check for EINTR in select)
Date: Wed, 05 Oct 2011 15:02:18 -0400
Karl Tomlinson wrote:

> x_session_check_input in xmsfns.c has this code:
>
>   if (select (ice_fd+1, &read_fds,
>               (SELECT_TYPE *)0, (SELECT_TYPE *)0, &tmout) < 0)
>     {
>       ice_fd = -1;
>       return 0;
>     }
>
> So ice_fd is set to -1 when select returns due to a signal
> (with errno == EINTR).  This leaves the fd open but prevents
> further processing.
>
> ksmserver then blocks on this connection and so other apps opening
> an ICE connection also block during start-up.
>
> The simple solution that I have tested is to only set ice_fd to -1
> when errno != EINTR.  x_session_check_input can still return early
> in this situation as it will be called again in the future.
>
> (Perhaps ice_fd never needs to be set to -1 here.  I don't know if
> there is ever a good reason why is should be set to -1.)
>
>
> In GNU Emacs 22.3.1 (x86_64-pc-linux-gnu, GTK+ Version 2.12.11)
>  of 2009-01-16 on blackhawk


Sorry for the delay. Is this still an issue? The current code does not
look like that.




This bug report was last modified 13 years and 292 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.