diff options
Diffstat (limited to 'src/process.c')
| -rw-r--r-- | src/process.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/src/process.c b/src/process.c index 788c9176349..d56819da67a 100644 --- a/src/process.c +++ b/src/process.c @@ -1,7 +1,7 @@ /* Asynchronous subprocess control for GNU Emacs. -Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2012 - Free Software Foundation, Inc. +Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2013 Free Software +Foundation, Inc. This file is part of GNU Emacs. @@ -4941,11 +4941,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, Therefore, if we get an error reading and errno = EIO, just continue, because the child process has exited and should clean itself up soon (e.g. when we - get a SIGCHLD). - - However, it has been known to happen that the SIGCHLD - got lost. So raise the signal again just in case. - It can't hurt. */ + get a SIGCHLD). */ else if (nread == -1 && errno == EIO) { struct Lisp_Process *p = XPROCESS (proc); @@ -4962,8 +4958,6 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, p->tick = ++process_tick; pset_status (p, Qfailed); } - else - handle_child_signal (SIGCHLD); } #endif /* HAVE_PTYS */ /* If we can detect process termination, don't consider the @@ -5724,19 +5718,19 @@ it is sent in several bunches. This may happen even for shorter regions. Output from processes can arrive in between bunches. */) (Lisp_Object process, Lisp_Object start, Lisp_Object end) { - Lisp_Object proc; - ptrdiff_t start1, end1; + Lisp_Object proc = get_process (process); + ptrdiff_t start_byte, end_byte; - proc = get_process (process); validate_region (&start, &end); + start_byte = CHAR_TO_BYTE (XINT (start)); + end_byte = CHAR_TO_BYTE (XINT (end)); + if (XINT (start) < GPT && XINT (end) > GPT) - move_gap (XINT (start)); + move_gap_both (XINT (start), start_byte); - start1 = CHAR_TO_BYTE (XINT (start)); - end1 = CHAR_TO_BYTE (XINT (end)); - send_process (proc, (char *) BYTE_POS_ADDR (start1), end1 - start1, - Fcurrent_buffer ()); + send_process (proc, (char *) BYTE_POS_ADDR (start_byte), + end_byte - start_byte, Fcurrent_buffer ()); return Qnil; } |
