1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-18 03:51:48 -07:00

(sigchld_handler): Change type of pid to pid_t. Scan deleted_pid_list

explicitly to avoid using Fmember which don't know about mark bits and
make_fixnum_or_float which may malloc.  Reported by Andreas Schwab.
This commit is contained in:
Chong Yidong 2007-03-17 18:16:03 +00:00
parent 46adc7a566
commit 8e050977ee

View file

@ -6486,7 +6486,7 @@ sigchld_handler (signo)
while (1)
{
register EMACS_INT pid;
pid_t pid;
WAITTYPE w;
Lisp_Object tail;
@ -6530,11 +6530,15 @@ sigchld_handler (signo)
/* Find the process that signaled us, and record its status. */
/* The process can have been deleted by Fdelete_process. */
tail = Fmember (make_fixnum_or_float (pid), deleted_pid_list);
if (!NILP (tail))
for (tail = deleted_pid_list; GC_CONSP (tail); tail = XCDR (tail))
{
Fsetcar (tail, Qnil);
goto sigchld_end_of_loop;
Lisp_Object xpid = XCAR (tail);
if ((GC_INTEGERP (xpid) && pid == (pid_t) XINT (xpid))
|| (GC_FLOATP (xpid) && pid == (pid_t) XFLOAT_DATA (xpid)))
{
XSETCAR (tail, Qnil);
goto sigchld_end_of_loop;
}
}
/* Otherwise, if it is asynchronous, it is in Vprocess_alist. */