;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 121.25
;;; Reason:
;;;  Fix PAINFUL problem in scheduler.  This is not the new scheduler which will appear in 122.
;;; Written 7-Feb-87 11:09:55 by RG at site LMI Cambridge
;;; while running on Alex from band 3
;;; with Experimental System 121.17, Experimental Lambda-Diag 15.0, Experimental ZMail 70.2, Experimental KERMIT 32.0, Experimental Unix-Interface 10.0, Experimental Local-File 72.0, Experimental FILE-Server 21.0, Experimental Tape 13.0, microcode 1730, SDU Boot Tape 3.12, SDU ROM 102.



; From modified file DJ: L.SYS2; PROCES.LISP#193 at 7-Feb-87 11:09:56
#10R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; PROCES  "

(DEFUN PROCESS-CONSIDER-RUNNABILITY (&OPTIONAL (PROCESS SELF))
  "Add PROCESS to ACTIVE-PROCESSES if it should be there; remove it if not."
  (WITHOUT-INTERRUPTS
    (COND ((OR (PROCESS-ARREST-REASONS PROCESS) (NULL (PROCESS-RUN-REASONS PROCESS)))
	   ;; Process is arrested, better not be active
	   (LET ((APE (ASSQ PROCESS ACTIVE-PROCESSES)))
	     (WHEN APE
		;This might be "unsafe", so copy it.  See SET-PROCESS-WAIT.
	       (setf (process-wait-argument-list process)
		     (copylist (process-wait-argument-list process)))
	       (SETF (CAR APE) NIL)
	       (PROCESS-REINSERT-AENTRY APE))
	     (TV::WHO-LINE-RUN-STATE-UPDATE)))
	  ((ASSQ PROCESS ACTIVE-PROCESSES))
	  (T
	   (PROCESS-ACTIVE-ENTRY PROCESS)
	   ;; If process's stack group is in a bad state,
	   ;; make it wait instead of actually running (unless it's current!).
	   ;; ACTIVE is a bad state for a process which isn't running!
	   (AND (NOT (PROCESS-SIMPLE-P PROCESS))
		(NOT (SG-RESUMABLE-P (PROCESS-STACK-GROUP PROCESS)))
		CURRENT-PROCESS			;Prevents lossage in PROCESS-INITIALIZE
		(SEND PROCESS :FLUSH))
	   (TV::WHO-LINE-RUN-STATE-UPDATE)))))

))
