unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#14862: 24.3.50; Subprocess invocation hangs
@ 2013-07-14  9:17 YAMAMOTO Mitsuharu
  2013-07-16  7:07 ` Paul Eggert
  0 siblings, 1 reply; 3+ messages in thread
From: YAMAMOTO Mitsuharu @ 2013-07-14  9:17 UTC (permalink / raw)
  To: 14862

The following should only be reproducible on the platforms where
neither O_CLOEXEC nor O_NOINHERIT is available, such as CentOS 5 or
Mac OS X <= 10.6.

* Steps to reproduce

1. $ emacs -Q
2. M-x shell RET

* Result

Emacs hands, blocking at line 1897 in process.c:

  1889	      /* Wait for child_setup to complete in case that vfork is
  1890		 actually defined as fork.  The descriptor wait_child_setup[1]
  1891		 of a pipe is closed at the child side either by close-on-exec
  1892		 on successful execve or the _exit call in child_setup.  */
  1893	      {
  1894		char dummy;
  1895	
  1896		emacs_close (wait_child_setup[1]);
  1897		emacs_read (wait_child_setup[0], &dummy, 1);
  1898		emacs_close (wait_child_setup[0]);
  1899	      }

where wait_child_setup[] are intended to be close-on-exec:

  src/process.c:
  1670	  if (pipe2 (wait_child_setup, O_CLOEXEC) != 0)
  1671	    report_file_error ("Creating pipe", Qnil);

But O_CLOEXEC is actually defined as 0 on the platforms where neither
O_CLOEXEC nor O_NOINHERIT is available.

  lib/fcntl.in.h:
   194	#if !defined O_CLOEXEC && defined O_NOINHERIT
   195	/* Mingw spells it 'O_NOINHERIT'.  */
   196	# define O_CLOEXEC O_NOINHERIT
   197	#endif
   198	
   199	#ifndef O_CLOEXEC
   200	# define O_CLOEXEC 0
   201	#endif

As a result, the above pipe2 call does not set the close-on-exec flag
for the created file descriptors.

Just setting O_CLOEXEC to some non-zero value would cause another
problem, because emacs_open uses it for checking its availability:

  src/sysdep.c:
  2168	  if (! O_CLOEXEC && 0 <= fd)
  2169	    fcntl (fd, F_SETFD, FD_CLOEXEC);

				     YAMAMOTO Mitsuharu
				mituharu@math.s.chiba-u.ac.jp

In GNU Emacs 24.3.50.1 (i686-pc-linux-gnu, GTK+ Version 2.10.4)
 of 2013-07-14 on localhost.localdomain
Bzr revision: 113419 eggert@cs.ucla.edu-20130714051848-v62h26m8r874rvlf
Windowing system distributor `The X.Org Foundation', version 11.0.70101000
System Description:	CentOS release 5.9 (Final)





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#14862: 24.3.50; Subprocess invocation hangs
  2013-07-14  9:17 bug#14862: 24.3.50; Subprocess invocation hangs YAMAMOTO Mitsuharu
@ 2013-07-16  7:07 ` Paul Eggert
  2013-07-17  1:45   ` YAMAMOTO Mitsuharu
  0 siblings, 1 reply; 3+ messages in thread
From: Paul Eggert @ 2013-07-16  7:07 UTC (permalink / raw)
  To: YAMAMOTO Mitsuharu

Thanks for reporting that.  I installed what I hope is a fix.
Could you please try trunk bzr 113430 or later, on one of
those platforms?





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#14862: 24.3.50; Subprocess invocation hangs
  2013-07-16  7:07 ` Paul Eggert
@ 2013-07-17  1:45   ` YAMAMOTO Mitsuharu
  0 siblings, 0 replies; 3+ messages in thread
From: YAMAMOTO Mitsuharu @ 2013-07-17  1:45 UTC (permalink / raw)
  To: Paul Eggert; +Cc: 14862-done

>>>>> On Tue, 16 Jul 2013 00:07:30 -0700, Paul Eggert <eggert@cs.ucla.edu> said:

> Thanks for reporting that.  I installed what I hope is a fix.  Could
> you please try trunk bzr 113430 or later, on one of those platforms?

Yes.  Subprocess invocation no longer hangs on Cent OS 5 or Mac OS X
10.6.  Closing the bug.

BTW, the transition from explicit file descriptor close before exec by
close-process-descs to the use of close-on-exec seems to work as a
workaround for a kernel bug on OS X 10.8, which causes kernel panic on
exit (Bug IDs 13682, 13726, 13799, 13901, 14119, and 14478).

				     YAMAMOTO Mitsuharu
				mituharu@math.s.chiba-u.ac.jp






^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-07-17  1:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-14  9:17 bug#14862: 24.3.50; Subprocess invocation hangs YAMAMOTO Mitsuharu
2013-07-16  7:07 ` Paul Eggert
2013-07-17  1:45   ` YAMAMOTO Mitsuharu

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).