Mercurial > emacs
diff src/process.c @ 90381:65ca8fb66a0d
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-54
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 190-203)
- Update from CVS
- Undo incorrect merge of etc/images/README from Gnus 5.10
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 74-80)
- Update from CVS
- Update from CVS: README: Addition from 5.10.6 tar ball.
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sun, 09 Apr 2006 00:38:22 +0000 |
parents | e6bf73e43cf4 2d844bbbccd4 |
children | c156f6a9e7b5 |
line wrap: on
line diff
--- a/src/process.c Fri Apr 07 12:02:40 2006 +0000 +++ b/src/process.c Sun Apr 09 00:38:22 2006 +0000 @@ -414,10 +414,10 @@ struct Lisp_Process *p; { union { int i; WAITTYPE wt; } u; - u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16); + eassert (p->raw_status_new); + u.i = p->raw_status; p->status = status_convert (u.wt); - p->raw_status_low = Qnil; - p->raw_status_high = Qnil; + p->raw_status_new = 0; } /* Convert a process status word in Unix format to @@ -619,11 +619,10 @@ XSETINT (p->infd, -1); XSETINT (p->outfd, -1); - XSETFASTINT (p->pid, 0); XSETFASTINT (p->tick, 0); XSETFASTINT (p->update_tick, 0); - p->raw_status_low = Qnil; - p->raw_status_high = Qnil; + p->pid = 0; + p->raw_status_new = 0; p->status = Qrun; p->mark = Fmake_marker (); @@ -790,8 +789,7 @@ process = get_process (process); p = XPROCESS (process); - p->raw_status_low = Qnil; - p->raw_status_high = Qnil; + p->raw_status_new = 0; if (NETCONN1_P (p)) { p->status = Fcons (Qexit, Fcons (make_number (0), Qnil)); @@ -841,7 +839,7 @@ return process; p = XPROCESS (process); - if (!NILP (p->raw_status_low)) + if (p->raw_status_new) update_status (p); status = p->status; if (CONSP (status)) @@ -866,7 +864,7 @@ register Lisp_Object process; { CHECK_PROCESS (process); - if (!NILP (XPROCESS (process)->raw_status_low)) + if (XPROCESS (process)->raw_status_new) update_status (XPROCESS (process)); if (CONSP (XPROCESS (process)->status)) return XCAR (XCDR (XPROCESS (process)->status)); @@ -881,7 +879,9 @@ register Lisp_Object process; { CHECK_PROCESS (process); - return XPROCESS (process)->pid; + return (XPROCESS (process)->pid + ? make_fixnum_or_float (XPROCESS (process)->pid) + : Qnil); } DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0, @@ -1363,7 +1363,7 @@ Finsert (1, &p->name); Findent_to (i_status, minspace); - if (!NILP (p->raw_status_low)) + if (p->raw_status_new) update_status (p); symbol = p->status; if (CONSP (p->status)) @@ -1735,7 +1735,7 @@ abort (); /* Was PROC started successfully? */ - if (XINT (XPROCESS (proc)->pid) <= 0) + if (XPROCESS (proc)->pid <= 0) remove_process (proc); return Qnil; @@ -1946,7 +1946,7 @@ in the table after this function has returned; if it does it might cause call-process to hang and subsequent asynchronous processes to get their return values scrambled. */ - XSETINT (XPROCESS (process)->pid, -1); + XPROCESS (process)->pid = -1; BLOCK_INPUT; @@ -2137,7 +2137,7 @@ else { /* vfork succeeded. */ - XSETFASTINT (XPROCESS (process)->pid, pid); + XPROCESS (process)->pid = pid; #ifdef WINDOWSNT register_child (pid, inchannel); @@ -3350,7 +3350,7 @@ p->kill_without_query = Qt; if ((tem = Fplist_get (contact, QCstop), !NILP (tem))) p->command = Qt; - p->pid = Qnil; + p->pid = 0; XSETINT (p->infd, inch); XSETINT (p->outfd, outch); if (is_server && socktype == SOCK_STREAM) @@ -4066,7 +4066,7 @@ p->sentinel = ps->sentinel; p->filter = ps->filter; p->command = Qnil; - p->pid = Qnil; + p->pid = 0; XSETINT (p->infd, s); XSETINT (p->outfd, s); p->status = Qrun; @@ -4366,9 +4366,9 @@ /* Don't wait for output from a non-running process. Just read whatever data has already been received. */ - if (wait_proc != 0 && !NILP (wait_proc->raw_status_low)) + if (wait_proc && wait_proc->raw_status_new) update_status (wait_proc); - if (wait_proc != 0 + if (wait_proc && ! EQ (wait_proc->status, Qrun) && ! EQ (wait_proc->status, Qconnect)) { @@ -4752,7 +4752,7 @@ /* Preserve status of processes already terminated. */ XSETINT (XPROCESS (proc)->tick, ++process_tick); deactivate_process (proc); - if (!NILP (XPROCESS (proc)->raw_status_low)) + if (XPROCESS (proc)->raw_status_new) update_status (XPROCESS (proc)); if (EQ (XPROCESS (proc)->status, Qrun)) XPROCESS (proc)->status @@ -5293,7 +5293,7 @@ VMS_PROC_STUFF *vs, *get_vms_process_pointer(); #endif /* VMS */ - if (! NILP (p->raw_status_low)) + if (p->raw_status_new) update_status (p); if (! EQ (p->status, Qrun)) error ("Process %s not running", SDATA (p->name)); @@ -5550,8 +5550,7 @@ proc = process_sent_to; p = XPROCESS (proc); #endif - p->raw_status_low = Qnil; - p->raw_status_high = Qnil; + p->raw_status_new = 0; p->status = Fcons (Qexit, Fcons (make_number (256), Qnil)); XSETINT (p->tick, ++process_tick); deactivate_process (proc); @@ -5666,7 +5665,7 @@ gid = emacs_get_tty_pgrp (p); - if (gid == XFASTINT (p->pid)) + if (gid == p->pid) return Qnil; return Qt; } @@ -5713,7 +5712,7 @@ /* If we are using pgrps, get a pgrp number and make it negative. */ if (NILP (current_group)) /* Send the signal to the shell's process group. */ - gid = XFASTINT (p->pid); + gid = p->pid; else { #ifdef SIGNALS_VIA_CHARACTERS @@ -5832,7 +5831,7 @@ if (gid == -1) /* If we can't get the information, assume the shell owns the tty. */ - gid = XFASTINT (p->pid); + gid = p->pid; /* It is not clear whether anything really can set GID to -1. Perhaps on some system one of those ioctls can or could do so. @@ -5842,12 +5841,12 @@ #else /* ! defined (TIOCGPGRP ) */ /* Can't select pgrps on this system, so we know that the child itself heads the pgrp. */ - gid = XFASTINT (p->pid); + gid = p->pid; #endif /* ! defined (TIOCGPGRP ) */ /* If current_group is lambda, and the shell owns the terminal, don't send any signal. */ - if (EQ (current_group, Qlambda) && gid == XFASTINT (p->pid)) + if (EQ (current_group, Qlambda) && gid == p->pid) return; } @@ -5855,8 +5854,7 @@ { #ifdef SIGCONT case SIGCONT: - p->raw_status_low = Qnil; - p->raw_status_high = Qnil; + p->raw_status_new = 0; p->status = Qrun; XSETINT (p->tick, ++process_tick); if (!nomsg) @@ -5875,7 +5873,7 @@ #endif case SIGKILL: #ifdef VMS - sys$forcex (&(XFASTINT (p->pid)), 0, 1); + sys$forcex (&(p->pid), 0, 1); whoosh: #endif flush_pending_output (XINT (p->infd)); @@ -5887,7 +5885,7 @@ obvious alternative. */ if (no_pgrp) { - kill (XFASTINT (p->pid), signo); + kill (p->pid, signo); return; } @@ -5900,7 +5898,7 @@ } else { - gid = - XFASTINT (p->pid); + gid = - p->pid; kill (gid, signo); } #else /* ! defined (TIOCSIGSEND) */ @@ -6020,11 +6018,17 @@ (process, sigcode) Lisp_Object process, sigcode; { - Lisp_Object pid; + pid_t pid; if (INTEGERP (process)) { - pid = process; + pid = XINT (process); + goto got_it; + } + + if (FLOATP (process)) + { + pid = (pid_t) XFLOAT (process); goto got_it; } @@ -6033,8 +6037,8 @@ Lisp_Object tem; if (tem = Fget_process (process), NILP (tem)) { - pid = Fstring_to_number (process, make_number (10)); - if (XINT (pid) != 0) + pid = XINT (Fstring_to_number (process, make_number (10))); + if (pid > 0) goto got_it; } process = tem; @@ -6047,7 +6051,7 @@ CHECK_PROCESS (process); pid = XPROCESS (process)->pid; - if (!INTEGERP (pid) || XINT (pid) <= 0) + if (pid <= 0) error ("Cannot signal process %s", SDATA (XPROCESS (process)->name)); got_it: @@ -6166,7 +6170,7 @@ #undef handle_signal - return make_number (kill (XINT (pid), XINT (sigcode))); + return make_number (kill (pid, XINT (sigcode))); } DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0, @@ -6190,7 +6194,7 @@ coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)]; /* Make sure the process is really alive. */ - if (! NILP (XPROCESS (proc)->raw_status_low)) + if (XPROCESS (proc)->raw_status_new) update_status (XPROCESS (proc)); if (! EQ (XPROCESS (proc)->status, Qrun)) error ("Process %s not running", SDATA (XPROCESS (proc)->name)); @@ -6215,7 +6219,7 @@ for communication with the subprocess, call shutdown to cause EOF. (In some old system, shutdown to socketpair doesn't work. Then we just can't win.) */ - if (NILP (XPROCESS (proc)->pid) + if (XPROCESS (proc)->pid == 0 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd)) shutdown (XINT (XPROCESS (proc)->outfd), 1); /* In case of socketpair, outfd == infd, so don't close it. */ @@ -6352,7 +6356,7 @@ { proc = XCDR (XCAR (tail)); p = XPROCESS (proc); - if (GC_EQ (p->childp, Qt) && XINT (p->pid) == pid) + if (GC_EQ (p->childp, Qt) && p->pid == pid) break; p = 0; } @@ -6364,7 +6368,7 @@ { proc = XCDR (XCAR (tail)); p = XPROCESS (proc); - if (GC_INTEGERP (p->pid) && XINT (p->pid) == -1) + if (p->pid == -1) break; p = 0; } @@ -6377,8 +6381,8 @@ XSETINT (p->tick, ++process_tick); u.wt = w; - XSETINT (p->raw_status_low, u.i & 0xffff); - XSETINT (p->raw_status_high, u.i >> 16); + p->raw_status = u.i; + p->raw_status_new = 1; /* If process has terminated, stop waiting for its output. */ if ((WIFSIGNALED (w) || WIFEXITED (w)) @@ -6575,7 +6579,7 @@ buffer = p->buffer; /* Get the text to use for the message. */ - if (!NILP (p->raw_status_low)) + if (p->raw_status_new) update_status (p); msg = status_message (p);