# HG changeset patch # User Gerd Moellmann # Date 983969701 0 # Node ID 9fde2182c68ae9ebc7da159093a60e094636d048 # Parent 22c3a86a20ee667c6bbb3ddc34571165e17082a2 (Fset_process_filter): Don't crash if the input file descriptor of PROCESS is closed. (Fset_process_window_size): Likewise. diff -r 22c3a86a20ee -r 9fde2182c68a src/process.c --- a/src/process.c Wed Mar 07 10:19:33 2001 +0000 +++ b/src/process.c Wed Mar 07 12:55:01 2001 +0000 @@ -734,18 +734,34 @@ (process, filter) register Lisp_Object process, filter; { + struct Lisp_Process *p; + CHECK_PROCESS (process, 0); - if (EQ (filter, Qt)) + p = XPROCESS (process); + + /* Don't signal an error if the process' input file descriptor + is closed. This could make debugging Lisp more difficult, + for example when doing something like + + (setq process (start-process ...)) + (debug) + (set-process-filter process ...) */ + + if (XINT (p->infd) >= 0) { - FD_CLR (XINT (XPROCESS (process)->infd), &input_wait_mask); - FD_CLR (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask); + if (EQ (filter, Qt)) + { + FD_CLR (XINT (p->infd), &input_wait_mask); + FD_CLR (XINT (p->infd), &non_keyboard_wait_mask); + } + else if (EQ (XPROCESS (process)->filter, Qt)) + { + FD_SET (XINT (p->infd), &input_wait_mask); + FD_SET (XINT (p->infd), &non_keyboard_wait_mask); + } } - else if (EQ (XPROCESS (process)->filter, Qt)) - { - FD_SET (XINT (XPROCESS (process)->infd), &input_wait_mask); - FD_SET (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask); - } - XPROCESS (process)->filter = filter; + + p->filter = filter; return filter; } @@ -793,8 +809,10 @@ CHECK_PROCESS (process, 0); CHECK_NATNUM (height, 0); CHECK_NATNUM (width, 0); - if (set_window_size (XINT (XPROCESS (process)->infd), - XINT (height), XINT (width)) <= 0) + + if (XINT (XPROCESS (process)->infd < 0) + || set_window_size (XINT (XPROCESS (process)->infd), + XINT (height), XINT (width)) <= 0) return Qnil; else return Qt;