*DECK DB$RSDC 
USETEXT CDCSCTX 
      PROC DB$RSDC; 
      BEGIN 
 #
* *   DB$RSDC - RESET DELAY COUNTS               PAGE  1
* *   BOB MCALLESTER                             DATE  11/09/81 
* 
* DC  PURPOSE 
* 
*     REDUCE OUTSTANDING DELAY COUNTS TO ACCELERATE EXECUTION 
*     OF DELAYED EVENTS.
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     THE CURRENT RCB IS NOT TO BE ACCELERATED. 
* 
* DC  EXIT CONDITIONS 
* 
*     DELAYED EVENTS HAVE HAD THEIR SCHEDULES ACCELERATED 
* 
* DC  CALLING ROUTINES
* 
*     DB$ADAX                ATTACH DATABASE AND INDEX FILES
*     DB$ATCH*               ATTACH PROCESSOR (NOS ONLY)
*     DB$JFIN                JOURNAL LOG FILE INVOKE
*     DB$JRPT                JOURNAL LOG RECOVERY POINT 
*     DB$MTR                 CDCS ROLL-OUT MONITOR
*     DB$TQTT                TQT TERMINATION PROCESSOR
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$FLOP;     # RECORD A FLOW POINT                     #
      XREF PROC DB$POP;      # TAKE AN ITEM FROM THE PUSH-DOWN STACK   #
      XREF PROC DB$PUSH;     # PUT AN ITEM ON THE PUSH-DOWN STACK      #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     RCB 
*       DELAY COUNT IN PUSH-DOWN STACK
* 
* DC  DESCRIPTION 
* 
*     SCAN ALL OF THE RCB'S EXCEPT THE ONE THAT THE RCB POINTER 
*     CURRENTLY POINTS TO.
*     REDUCE THE DELAY COUNTS OF EACH OF THOSE THAT ARE WAITING FOR 
*     COUNT DOWN. 
*     IF THERE ARE SEVERAL JOBS WAITING, GIVE THEM INCREMENTAL DELAYS 
*     SO THEY WONT ALL MATURE DURING A SINGLE MONITOR CYCLE.
 #
# 
*     LOCAL VARIABLES 
# 
      ITEM SAVERCB I;        # SAVE THE CURRENT RCB LOCATION           #
      ITEM SCRATCH I;        # A SCRATCH ITEM                          #
      ITEM SMALLDELAY I;     # THE DELAY COUNT TO BE ASSIGNED          #
  
  
  
#     B E G I N   D B $ R S D C   E X E C U T A B L E   C O D E .      #
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("RSDC");
      CONTROL ENDIF;
  
      SAVERCB = LOC(RCB); 
      SMALLDELAY = 2; 
      P<RCB> = RCNEXT[0]; 
  
      FOR SCRATCH = SCRATCH WHILE LOC(RCB) NQ SAVERCB 
      DO
        BEGIN 
        IF RCCT[0] EQ DFWAITCOUNT 
        THEN
          BEGIN 
          DB$POP(SCRATCH);
          IF SCRATCH GR SMALLDELAY
          THEN
            BEGIN 
            SCRATCH = SMALLDELAY; 
            SMALLDELAY = SMALLDELAY +8; 
            END 
          DB$PUSH(SCRATCH); 
          END 
        P<RCB> = RCNEXT[0]; 
        END 
      END 
      TERM
