comparison src/process.c @ 55962:8979bc3ade70

(Fdelete_process): Undo 2004-05-28 change. Instead, call status_notify also for network process. (status_message): Use process instead of status as arg. Give messages "deleted" or "connection broken by remote peer" for an exited network process. (status_notify): Change call to status_message. (read_process_output): Increase readmax to 4096. Do not increase buffer size for datagram channels (default is now large enough).
author Kim F. Storm <storm@cua.dk>
date Sun, 06 Jun 2004 22:17:53 +0000
parents b2e8aa96ff9d
children 5839db7619ca cf8f0a3b5cb4
comparison
equal deleted inserted replaced
55961:e090d01739be 55962:8979bc3ade70
443 } 443 }
444 } 444 }
445 445
446 /* Return a string describing a process status list. */ 446 /* Return a string describing a process status list. */
447 447
448 Lisp_Object 448 static Lisp_Object
449 status_message (status) 449 status_message (p)
450 Lisp_Object status; 450 struct Lisp_Process *p;
451 { 451 {
452 Lisp_Object status = p->status;
452 Lisp_Object symbol; 453 Lisp_Object symbol;
453 int code, coredump; 454 int code, coredump;
454 Lisp_Object string, string2; 455 Lisp_Object string, string2;
455 456
456 decode_status (status, &symbol, &code, &coredump); 457 decode_status (status, &symbol, &code, &coredump);
467 SSET (string, 0, DOWNCASE (SREF (string, 0))); 468 SSET (string, 0, DOWNCASE (SREF (string, 0)));
468 return concat2 (string, string2); 469 return concat2 (string, string2);
469 } 470 }
470 else if (EQ (symbol, Qexit)) 471 else if (EQ (symbol, Qexit))
471 { 472 {
473 if (NETCONN1_P (p))
474 return build_string (code == 0 ? "deleted\n" : "connection broken by remote peer\n");
472 if (code == 0) 475 if (code == 0)
473 return build_string ("finished\n"); 476 return build_string ("finished\n");
474 string = Fnumber_to_string (make_number (code)); 477 string = Fnumber_to_string (make_number (code));
475 string2 = build_string (coredump ? " (core dumped)\n" : "\n"); 478 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
476 return concat3 (build_string ("exited abnormally with code "), 479 return concat3 (build_string ("exited abnormally with code "),
762 XPROCESS (process)->raw_status_high = Qnil; 765 XPROCESS (process)->raw_status_high = Qnil;
763 if (NETCONN_P (process)) 766 if (NETCONN_P (process))
764 { 767 {
765 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil)); 768 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
766 XSETINT (XPROCESS (process)->tick, ++process_tick); 769 XSETINT (XPROCESS (process)->tick, ++process_tick);
770 status_notify ();
767 } 771 }
768 else if (XINT (XPROCESS (process)->infd) >= 0) 772 else if (XINT (XPROCESS (process)->infd) >= 0)
769 { 773 {
770 Fkill_process (process, Qnil); 774 Fkill_process (process, Qnil);
771 /* Do this now, since remove_process will make sigchld_handler do nothing. */ 775 /* Do this now, since remove_process will make sigchld_handler do nothing. */
772 XPROCESS (process)->status 776 XPROCESS (process)->status
773 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil)); 777 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
774 XSETINT (XPROCESS (process)->tick, ++process_tick); 778 XSETINT (XPROCESS (process)->tick, ++process_tick);
775 status_notify (); 779 status_notify ();
776 } 780 }
777 /* Do not call remove_process here; either status_notify has already done 781 remove_process (process);
778 it, or will do so the next time emacs polls for input. Thus network
779 processes are not immediately removed, and their sentinel will be
780 called.
781
782 Since Fdelete_process is called by kill_buffer_processes, this also
783 means that a network process sentinel will run after the buffer is
784 dead, which would not be the case if status_notify() were called
785 unconditionally here. This way process sentinels observe consistent
786 behavior with regard to buffer-live-p.
787 */
788 /* remove_process (process); */
789 return Qnil; 782 return Qnil;
790 } 783 }
791 784
792 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0, 785 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
793 doc: /* Return the status of PROCESS. 786 doc: /* Return the status of PROCESS.
4701 4694
4702 /* Read pending output from the process channel, 4695 /* Read pending output from the process channel,
4703 starting with our buffered-ahead character if we have one. 4696 starting with our buffered-ahead character if we have one.
4704 Yield number of decoded characters read. 4697 Yield number of decoded characters read.
4705 4698
4706 This function reads at most 1024 characters. 4699 This function reads at most 4096 characters.
4707 If you want to read all available subprocess output, 4700 If you want to read all available subprocess output,
4708 you must call it repeatedly until it returns zero. 4701 you must call it repeatedly until it returns zero.
4709 4702
4710 The characters read are decoded according to PROC's coding-system 4703 The characters read are decoded according to PROC's coding-system
4711 for decoding. */ 4704 for decoding. */
4721 register struct buffer *old = current_buffer; 4714 register struct buffer *old = current_buffer;
4722 register struct Lisp_Process *p = XPROCESS (proc); 4715 register struct Lisp_Process *p = XPROCESS (proc);
4723 register int opoint; 4716 register int opoint;
4724 struct coding_system *coding = proc_decode_coding_system[channel]; 4717 struct coding_system *coding = proc_decode_coding_system[channel];
4725 int carryover = XINT (p->decoding_carryover); 4718 int carryover = XINT (p->decoding_carryover);
4726 int readmax = 1024; 4719 int readmax = 4096;
4727 4720
4728 #ifdef VMS 4721 #ifdef VMS
4729 VMS_PROC_STUFF *vs, *get_vms_process_pointer(); 4722 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
4730 4723
4731 vs = get_vms_process_pointer (p->pid); 4724 vs = get_vms_process_pointer (p->pid);
4753 chars = (char *) alloca (nbytes + carryover); 4746 chars = (char *) alloca (nbytes + carryover);
4754 bcopy (SDATA (p->decoding_buf), buf, carryover); 4747 bcopy (SDATA (p->decoding_buf), buf, carryover);
4755 bcopy (vs->inputBuffer, chars + carryover, nbytes); 4748 bcopy (vs->inputBuffer, chars + carryover, nbytes);
4756 } 4749 }
4757 #else /* not VMS */ 4750 #else /* not VMS */
4758
4759 #ifdef DATAGRAM_SOCKETS
4760 /* A datagram is one packet; allow at least 1500+ bytes of data
4761 corresponding to the typical Ethernet frame size. */
4762 if (DATAGRAM_CHAN_P (channel))
4763 {
4764 /* carryover = 0; */ /* Does carryover make sense for datagrams? */
4765 readmax += 1024;
4766 }
4767 #endif
4768 4751
4769 chars = (char *) alloca (carryover + readmax); 4752 chars = (char *) alloca (carryover + readmax);
4770 if (carryover) 4753 if (carryover)
4771 /* See the comment above. */ 4754 /* See the comment above. */
4772 bcopy (SDATA (p->decoding_buf), chars, carryover); 4755 bcopy (SDATA (p->decoding_buf), chars, carryover);
6397 buffer = p->buffer; 6380 buffer = p->buffer;
6398 6381
6399 /* Get the text to use for the message. */ 6382 /* Get the text to use for the message. */
6400 if (!NILP (p->raw_status_low)) 6383 if (!NILP (p->raw_status_low))
6401 update_status (p); 6384 update_status (p);
6402 msg = status_message (p->status); 6385 msg = status_message (p);
6403 6386
6404 /* If process is terminated, deactivate it or delete it. */ 6387 /* If process is terminated, deactivate it or delete it. */
6405 symbol = p->status; 6388 symbol = p->status;
6406 if (CONSP (p->status)) 6389 if (CONSP (p->status))
6407 symbol = XCAR (p->status); 6390 symbol = XCAR (p->status);