emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#14862: closed (24.3.50; Subprocess invocation hang


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#14862: closed (24.3.50; Subprocess invocation hangs)
Date: Wed, 17 Jul 2013 01:47:02 +0000

Your message dated Wed, 17 Jul 2013 10:45:55 +0900
with message-id <address@hidden>
and subject line Re: 24.3.50; Subprocess invocation hangs
has caused the debbugs.gnu.org bug report #14862,
regarding 24.3.50; Subprocess invocation hangs
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
14862: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14862
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 24.3.50; Subprocess invocation hangs Date: Sun, 14 Jul 2013 18:17:32 +0900 User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)
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
                                address@hidden

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 address@hidden
Windowing system distributor `The X.Org Foundation', version 11.0.70101000
System Description:     CentOS release 5.9 (Final)



--- End Message ---
--- Begin Message --- Subject: Re: 24.3.50; Subprocess invocation hangs Date: Wed, 17 Jul 2013 10:45:55 +0900 User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)
>>>>> On Tue, 16 Jul 2013 00:07:30 -0700, Paul Eggert <address@hidden> 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
                                address@hidden



--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]