XEmacs 21.4.12 "Portable Code".
[chise/xemacs-chise.git.1] / src / process-unix.c
index c0d1989..0d57c95 100644 (file)
@@ -892,6 +892,7 @@ unix_create_process (Lisp_Process *p,
 #endif
 
   set_descriptor_non_blocking (inchannel);
+  set_descriptor_non_blocking (outchannel);
 
   /* Record this as an active process, with its channels.
      As a result, child_setup will close Emacs's side of the pipes.  */
@@ -914,6 +915,10 @@ unix_create_process (Lisp_Process *p,
        int xforkin = forkin;
        int xforkout = forkout;
 
+       /* Checking for quit in the child is bad because that will 
+          cause I/O, and that, in turn, can confuse the X connection. */
+       begin_dont_check_for_quit();
+
        /* Disconnect the current controlling terminal, pursuant to
           making the pty be the controlling terminal of the process.
           Also put us in our own process group. */
@@ -1331,12 +1336,15 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream)
       /* #### There is controversy over whether this might cause fd leakage */
       /*      my tests say no. -slb */
       XLSTREAM (p->pipe_outstream)->flags &= ~LSTREAM_FL_IS_OPEN;
+#ifdef FILE_CODING
+      XLSTREAM (p->coding_outstream)->flags &= ~LSTREAM_FL_IS_OPEN;
+#endif
       p->status_symbol = Qexit;
       p->exit_code = 256; /* #### SIGPIPE ??? */
       p->core_dumped = 0;
       p->tick++;
       process_tick++;
-      deactivate_process (*((Lisp_Object *) (&vol_proc)));
+      deactivate_process (vol_proc);
       invalid_operation ("SIGPIPE raised on process; closed it", p->name);
     }