aboutsummaryrefslogtreecommitdiffstats
path: root/src/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'src/ChangeLog')
-rw-r--r--src/ChangeLog57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 88fbf7a99f2..655eb1595c0 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,60 @@
12012-11-23 Paul Eggert <eggert@cs.ucla.edu>
2
3 Fix a race condition with glib (Bug#8855).
4 This is a backport from the trunk, consisting of:
5
6 2012-11-17 Eli Zaretskii <eliz@gnu.org>
7
8 * w32proc.c (create_child): Don't clip the PID of the child
9 process to fit into an Emacs integer, as this is no longer a
10 restriction.
11 (waitpid): Rename from sys_wait. Emulate a Posix 'waitpid' by
12 reaping only the process specified by PID argument, if that is
13 positive. Use PID instead of dead_child to know which process to
14 reap. Wait for the child to die only if WNOHANG is not in
15 OPTIONS.
16 (sys_select): Don't set dead_child.
17
18 * sysdep.c (wait_for_termination_1): Remove the WINDOWSNT portion,
19 as it is no longer needed.
20
21 * process.c (waitpid, WUNTRACED) [!WNOHANG]: Remove definitions,
22 no longer needed.
23 (record_child_status_change): Remove the setting of
24 record_at_most_one_child for the !WNOHANG case.
25
26 2012-11-03 Paul Eggert <eggert@cs.ucla.edu>
27
28 Fix a race condition that causes Emacs to mess up glib (Bug#8855).
29 This is a backport from the trunk.
30 The symptom is a diagnostic "GLib-WARNING **: In call to
31 g_spawn_sync(), exit status of a child process was requested but
32 SIGCHLD action was set to SIG_IGN and ECHILD was received by
33 waitpid(), so exit status can't be returned." The diagnostic
34 is partly wrong, as the SIGCHLD action is not set to SIG_IGN.
35 The real bug is a race condition between Emacs and glib: Emacs
36 does a waitpid (-1, ...) and reaps glib's subprocess by mistake,
37 so that glib can't find it. Work around the bug by invoking
38 waitpid only on subprocesses that Emacs itself creates.
39 * process.c (create_process, record_child_status_change):
40 Don't use special value -1 in pid field, as the caller now must
41 know the pid rather than having the callee infer it. The
42 inference was sometimes incorrect anyway, due to another race.
43 (create_process): Set new 'alive' member if child is created.
44 (process_status_retrieved): New function.
45 (record_child_status_change): Use it.
46 Accept negative 1st argument, which means to wait for the
47 processes that Emacs already knows about. Move special-case code
48 for DOS_NT (which lacks WNOHANG) here, from caller. Keep track of
49 processes that have already been waited for, by testing and
50 clearing new 'alive' member.
51 (CAN_HANDLE_MULTIPLE_CHILDREN): Remove, as record_child_status_change
52 now does this internally.
53 (handle_child_signal): Let record_child_status_change do all
54 the work, since we do not want to reap all exited child processes,
55 only the child processes that Emacs itself created.
56 * process.h (Lisp_Process): New boolean member 'alive'.
57
12012-11-23 Eli Zaretskii <eliz@gnu.org> 582012-11-23 Eli Zaretskii <eliz@gnu.org>
2 59
3 * xdisp.c (set_cursor_from_row): Skip step 2 only if point is not 60 * xdisp.c (set_cursor_from_row): Skip step 2 only if point is not