Subject: Re: bug#5723: 23.1.94; make-network-process and emacs hangs

From: YAMAMOTO Mitsuharu <[email-masked]>
Date: Thu, 18 Mar 2010 10:57:17 +0900

>>>>> On Wed, 17 Mar 2010 12:01:16 +0000, Leo <[email-masked]> said:

>> I guess OP's case is about `connect' rather than `getaddrinfo'.
>> 
>> http://lists.gnu.org/archive/html/emacs-devel/2009-08/msg00148.html
>> 
>> Leo, can you check where it blocks (using GDB), and whether giving
>> --without-sync-input as a configure option changes the situation
>> (using the X11 build, preferably)?

> With this option and build emacs with X11, I can't start the gui
> version, getting this error:

> Xlib: unexpected async reply (sequence 0x5c)!

> Starting emacs with emacs -nw I can quit with C-g nicely.

> I have no luck with --with-mac, C-g still can not stop the process.

The Carbon port and its descendants use polling with SIGALRM to check
whether C-g is pressed.  The systems without SIGIO (such as Solaris 8)
work similarly even with X11.  If your case blocks at `connect', then
it can't be quit with C-g regardless of SYNC_INPUT on those
ports/systems, because atimer is turned off during the `connect' call.

      immediate_quit = 1;
      QUIT;

      /* This turns off all alarm-based interrupts; the
	 bind_polling_period call above doesn't always turn all the
	 short-interval ones off, especially if interrupt_input is
	 set.

	 It'd be nice to be able to control the connect timeout
	 though.  Would non-blocking connect calls be portable?

	 This used to be conditioned by HAVE_GETADDRINFO.  Why?  */

      turn_on_atimers (0);

      ret = connect (s, lres->ai_addr, lres->ai_addrlen);
      xerrno = errno;

      turn_on_atimers (1);

Again, could you check if it actually blocks at `connect', using GDB?

				     YAMAMOTO Mitsuharu
				[email-masked]