X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Fprocess-unix.c;h=f23a9e7197040329178b6c0ff71f0a2dd4545480;hp=c9ac0a1403ad4291c56ad09dfbf29dc46384b318;hb=a1655b870904de973c366d85ebdc8adde4ef5e1e;hpb=2fd9701a4f902054649dde9143a3f77809afee8f diff --git a/src/process-unix.c b/src/process-unix.c index c9ac0a1..f23a9e7 100644 --- a/src/process-unix.c +++ b/src/process-unix.c @@ -1139,6 +1139,14 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream) volatile Lisp_Object vol_proc = proc; Lisp_Process *volatile p = XPROCESS (proc); + /* #### JV: layering violation? + + This function knows too much about the relation between the encodingstream + (DATA_OUTSTREAM) and te actual output stream p->output_stream. + + If encoding streams properly forwarded all calls, we could simply + use DATA_OUTSTREAM everywhere. */ + if (!SETJMP (send_process_frame)) { /* use a reasonable-sized buffer (somewhere around the size of the @@ -1173,6 +1181,9 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream) that may allow the program to finish doing output and read more. */ Faccept_process_output (Qnil, make_int (1), Qnil); + /* It could have *really* finished, deleting the process */ + if (NILP(p->pipe_outstream)) + return; old_sigpipe = (SIGTYPE (*) (int)) signal (SIGPIPE, send_process_trap); Lstream_flush (XLSTREAM (p->pipe_outstream));