1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-26 19:18:50 +00:00
emacs/nt
Paul Eggert 6d4e8f62e9 Fix a race condition with glib (Bug#8855).
This is a backport from the trunk, consisting of:

2012-11-17  Eli Zaretskii  <eliz@gnu.org>

* nt/inc/sys/wait.h: New file, with prototype of waitpid and
definitions of macros it needs.
* nt/inc/ms-w32.h (wait): Don't define, 'wait' is not used anymore.
(sys_wait): Remove prototype.
* nt/config.nt (HAVE_SYS_WAIT_H): Define to 1.
* src/w32proc.c (create_child): Don't clip the PID of the child
process to fit into an Emacs integer, as this is no longer a
restriction.
(waitpid): Rename from sys_wait.  Emulate a Posix 'waitpid' by
reaping only the process specified by PID argument, if that is
positive.  Use PID instead of dead_child to know which process to
reap.  Wait for the child to die only if WNOHANG is not in
OPTIONS.
(sys_select): Don't set dead_child.
* src/sysdep.c (wait_for_termination_1): Remove the WINDOWSNT portion,
as it is no longer needed.
* src/process.c (waitpid, WUNTRACED) [!WNOHANG]: Remove definitions,
no longer needed.
(record_child_status_change): Remove the setting of
record_at_most_one_child for the !WNOHANG case.

2012-11-03  Paul Eggert  <eggert@cs.ucla.edu>

Fix a race condition that causes Emacs to mess up glib (Bug#8855).
This is a backport from the trunk.
The symptom is a diagnostic "GLib-WARNING **: In call to
g_spawn_sync(), exit status of a child process was requested but
SIGCHLD action was set to SIG_IGN and ECHILD was received by
waitpid(), so exit status can't be returned."  The diagnostic
is partly wrong, as the SIGCHLD action is not set to SIG_IGN.
The real bug is a race condition between Emacs and glib: Emacs
does a waitpid (-1, ...) and reaps glib's subprocess by mistake,
so that glib can't find it.  Work around the bug by invoking
waitpid only on subprocesses that Emacs itself creates.
* src/process.c (create_process, record_child_status_change):
Don't use special value -1 in pid field, as the caller now must
know the pid rather than having the callee infer it.  The
inference was sometimes incorrect anyway, due to another race.
(create_process): Set new 'alive' member if child is created.
(process_status_retrieved): New function.
(record_child_status_change): Use it.
Accept negative 1st argument, which means to wait for the
processes that Emacs already knows about.  Move special-case code
for DOS_NT (which lacks WNOHANG) here, from caller.  Keep track of
processes that have already been waited for, by testing and
clearing new 'alive' member.
(CAN_HANDLE_MULTIPLE_CHILDREN): Remove, as record_child_status_change
now does this internally.
(handle_child_signal): Let record_child_status_change do all
the work, since we do not want to reap all exited child processes,
only the child processes that Emacs itself created.
* src/process.h (Lisp_Process): New boolean member 'alive'.
2012-11-23 14:20:31 -08:00
..
icons Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
inc Fix a race condition with glib (Bug#8855). 2012-11-23 14:20:31 -08:00
.gitignore Nuke arch-tags. 2011-01-15 15:16:57 -08:00
addpm.c Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
addsection.c Support x64 build on MS-Windows with MSVC. 2012-09-30 23:36:42 +02:00
ChangeLog Fix a race condition with glib (Bug#8855). 2012-11-23 14:20:31 -08:00
cmdproxy.c Fix bug #10674 with infinite re-spawning of cmdproxy.exe. 2012-02-24 12:13:20 +02:00
config.nt Fix a race condition with glib (Bug#8855). 2012-11-23 14:20:31 -08:00
configure.bat Fix warnings when compiling on MS-Windows with -std=gnu99. 2012-10-17 21:02:44 +02:00
COPYING
ddeclient.c Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
emacs-src.tags Support TAGS targets in the w32 build. 2010-10-01 13:45:16 +02:00
emacs-x64.manifest Support x64 build on MS-Windows with MSVC. 2012-09-30 23:36:42 +02:00
emacs-x86.manifest Support x64 build on MS-Windows with MSVC. 2012-09-30 23:36:42 +02:00
emacs.rc Support x64 build on MS-Windows with MSVC. 2012-09-30 23:36:42 +02:00
emacsclient.rc Bump version to 24.2.50 2012-08-15 21:26:30 +08:00
envadd.bat Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
ftime-nostartup.bat Nuke arch-tags. 2011-01-15 15:16:57 -08:00
ftime.bat Nuke arch-tags. 2011-01-15 15:16:57 -08:00
gmake.defs Fix warnings when compiling on MS-Windows with -std=gnu99. 2012-10-17 21:02:44 +02:00
INSTALL Don't use the abbreviation "win" to refer to Windows (Bug#10421). 2012-07-29 01:18:29 -07:00
makefile.w32-in Support x64 build on MS-Windows with MSVC. 2012-09-30 23:36:42 +02:00
multi-install-info.bat Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
nmake.defs Fix !ifdef in nmake.defs. 2012-11-20 19:13:10 +02:00
paths.h Fix bug #11959 with startup warnings on MS-Windows about ../site-lisp. 2012-08-04 17:17:10 +03:00
preprep.c Fix compilation warnings in the MS-Windows build. 2012-10-02 19:55:29 +02:00
README Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
README.W32 Support building on MS-Windows with libxml2. 2012-04-07 16:57:36 +03:00
runemacs.c Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
subdirs.el
zipdist.bat Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

	     Emacs for Windows NT/2000 and Windows 95/98/ME

  Copyright (C) 2001-2012  Free Software Foundation, Inc.
  See the end of the file for license conditions.

  This directory contains support for compiling and running GNU Emacs on
  Windows NT, Windows 95, and their successors.  This port supports all
  of the major functionality of the Unix version, including
  subprocesses, windowing features (fonts, colors, scroll bars, multiple
  frames, etc.), and networking support.

  Precompiled distributions are also available; ftp to

	ftp://ftp.gnu.org/gnu/emacs/windows/

  for the latest precompiled distributions.

* Building and installing

  See the INSTALL file in this directory for detailed instructions on
  building and installing Emacs on your system.

* EXE files produced

  Building and installing Emacs will produce the following executable
  files in the bin directory.

  + emacs.exe - The main Emacs executable. As this is designed to run
    as both a text-mode application (emacs -nw) and as a GUI application,
    it will pop up a command prompt window if run directly from Explorer.

  + runemacs.exe - A wrapper for running Emacs as a GUI application
    without popping up a command prompt window.

  + emacsclient.exe - A command-line client program that can
    communicate with a running Emacs process. See the `Emacs Server'
    node of the Emacs manual.

  + emacsclientw.exe - A version of emacsclient that does not open
    a command-line window.

  + addpm.exe - A basic installer that creates Start Menu icons for Emacs.
    Running this is optional.

  + cmdproxy.exe - Used internally by Emacs to work around problems with
    the native shells in various versions of Windows.

  + ctags.exe, etags.exe - Tools for generating tag files.  See the
  `Tags' node of the Emacs manual.

  + ebrowse.exe - A tool for generating C++ browse information.  See the
    `Ebrowse' manual.

  + ddeclient.exe - A tool for interacting with DDE servers.

  + hexl.exe - A tool for converting files to hex dumps.  See the
    `Editing Binary Files' node of the Emacs manual.

  + movemail.exe - A helper application for safely moving mail from
    a mail spool or POP server to a local user mailbox.  See the
    `Movemail' node of the Emacs manual.

* Further information

  There is a web page that serves as a FAQ for the Windows port of
  Emacs (a.k.a. NTEmacs) at:

	http://www.gnu.org/software/emacs/windows/ntemacs.html

  There is also a mailing list for discussing issues related to this
  port of Emacs.  For information about the list, see this Web page:

	http://mail.gnu.org/mailman/listinfo/help-emacs-windows

  To ask questions on the mailing list, send email to
  help-emacs-windows@gnu.org.  (You don't need to subscribe for that.)
  To subscribe to the list or unsubscribe from it, fill the form you
  find at http://mail.gnu.org/mailman/listinfo/help-emacs-windows as
  explained there.

  Another valuable source of information and help which should not be
  overlooked is the various Usenet news groups dedicated to Emacs.
  These are particularly good for help with general issues which aren't
  specific to the Windows port of Emacs.  The main news groups to use
  for seeking help are:

	gnu.emacs.help
	comp.emacs

  There are also fairly regular postings and announcements of new or
  updated Emacs packages on this group:

	gnu.emacs.sources

* Reporting bugs

  If you encounter a bug in this port of Emacs, we would like to hear
  about it.  First check the file etc/PROBLEMS and the FAQ on the web
  page above to see if the bug is already known and if there are any
  workarounds.  If not, then check whether the bug has something to do
  with code in your .emacs file, e.g. by invoking Emacs with the "-Q"
  option.

  Use the built in bug reporting functionality in Emacs so that it
  will be seen by the right people.  You can use the command M-x
  report-emacs-bug to create and send the bug report, but in some
  cases there is a function to report bugs in a specific package;
  e.g. M-x gnus-bug for Gnus, M-x c-submit-bug-report for C/C++/Java
  mode, etc.


This file is part of GNU Emacs.

GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.