Google
 

Trailing-Edge - PDP-10 Archives - BB-L014E-BM - autopatch/dbsi20.f05
There are no other files named dbsi20.f05 in the archive.
;******************** START OF DBMS20-V6 EDIT 425 *************************     
;         
;SYMPTOM  
;	When an area is open for RETRIEVAL, DBMS returns
;	error status 360, and error data contains 0/19005.        
;         
;DIAGNOSIS
;	DBMS has attempted to read a page in a non-existent section         
;	in file opened read-only.  The monitor returns error LNGFX1         
;	but there is no code to trap this error properly, nor to  
;	store the JSYS error code.  
;         
;CURE     
;	Change code in DBMIO to retrieve the PMAP error and to    
;	ignore error LNGFX1. This will cause a 0326 exception     
;	(nonexistent page), rather than the 0360 (operating system
;	error). Handle other errors properly. 
;         
;*************** EDIT THE FOLLOWING INTO FILE 425.FIX *********************     
.EDIT 425 
.NAME RL  
.DATE 09-JUN-82     
.MODULE DBMIO       
	LNGFX1=601317      
	.FHSLF=400000      
.INSERT MGOS.R+16,REPLACE:2,<PMAP>      
	PMAP				;[425]     
	  ERJMP [PUSH 17,R1		;[425] Save some registers  
	      PUSH P,R2			;[425]     
	      MOVEI R1,.FHSLF		;[425] Get last error     
	      GETER			;[425]         
	      HRRZ R1,R2		;[425] Get the error code      
	      CAIE R1,LNGFX1		;[425] Is it the long file error?    
	      JRST [HRLZ R0,R1		;[425] Save the JSYS error code    
		   POP P,R2		;[425] Restore the registers       
		   POP P,R1		;[425]         
		   HLRZS R1		;[425] Get JFN in right half       
		   GETSTS		;[425] Get file status     
		   TLNN R2,(GS%EOF)	;[425] End of File?         
		   JRST [HRRI R0,^D19005 ;[425] No, signal an error       
			PUSHJ P,ERRRG.## ;[425]    
			PUSHJ P,XC.OS##] ;[425]    
		   TLO SS,(EOF.BIT)	;[425] Set End-of-File flag 
		   JRST .+1]		;[425] Return, no big deal        
	      SETO 1,			;[425] Prepare to unmap file page
	      MOVE 2,(17)		;[425] Get process,,memory page         
	      PMAP			;[425] Unmap it 
	        ERJMP [MOVEI 1,.FHSLF	;[425] Get the last error    
		  GETER			;[425]  
		  HRLZ R0,R1		;[425] Save for error data        
		  HRRI R0,^D19077	;[425] Enhance error data     
		  PUSHJ P,ERRRG.## 	;[425]  
		  PUSHJ P,XC.OS##] 	;[425]  
	      POP P,2			;[425] Restore registers         
	      POP P,1			;[425]       
	      JRST .+1]			;[425] Continue as usual       
.ENDI     
.ENDE     
;***************************** CAUTION *************************************    
;         
;		TO AVOID LOSING ANY PREVIOUS PATCHES  BE       
;		SURE TO USE THE LATEST PATCHED REL FILES       
;		       AS A BASE FOR THIS EDIT.      
;         
;	    THIS PATCH AFFECTS THE FOLLOWING DBMS COMPONENTS:     
;         
;				DBINFO         
;				DBMEND         
;				LIBOL
;				FORLIB         
;         
;         
;	------------------ TO INSTALL THIS EDIT ------------------
;         
;	@MAKLIB 
;	*DBS20.REL=DBS20.REL,425.FIX/F        
;	*DBSI20.REL=DBSI20.REL,425.FIX/F      
;	*DBMEN2.REL=DBMEN2.REL,425.FIX/F      
;	*^Z     
;	@SUBMIT DBMS20/TAG:DBALL	;DBMS20.CTL FROM DISTRIBUTION TAPE         
;         
;************************** END OF EDIT 425 *******************************     
;******************** START OF DBMS20-V6 EDIT 426 *************************     
;         
;SYMPTOM  
;	When a lock conflict occurs on OPEN AREA, the JSYS error code       
;	reported in ERROR-DATA is 777777, and not a valid JSYS error code.  
;         
;DIAGNOSIS
;	The ENQ.IT macro is not assembling code to save the error return    
;	in the left half of R0.     
;         
;CURE     
;	Rebuild the code assembled for ENQ.IT to save the JSYS error return.
;         
;*************** EDIT THE FOLLOWING INTO FILE 426.FIX *********************     
.EDIT 426 
.NAME WTK 
.DATE 23-JUN-82     
.MODULE DBMLOK      
.INSERT LOK.J2+2,REPLACE:2,<ENQ>        
	ENQ      
	  JRST	[HRL	R0,R1		;[426] SAVE THE ENQ ERROR RETURN        
		CAIN	LBEG,ENQX6   
		JRST	[HRRI	X20004 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.SOF]  
		CAIN	LBEG,ENQX5   
		JRST	[HRRI	X20501 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.DOR]  
		CAIE	LBEG,ENQX18  
		CAIN	LBEG,IPCFX8  
		JRST	[HRRI	X20502 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.RSX]  
		JRST	[HRRI	X20503 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.QOS]] 
.ENDI     
.INSERT LOK.OP+4,REPLACE:2,<ENQ>        
	ENQ      
	  JRST	[HRL	R0,R1		;[426] SAVE THE ENQ ERROR RETURN        
		CAIN	LBEG,ENQX6   
		JRST	[HRRI	X20005 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.RNA]  
		CAIN	LBEG,ENQX5   
		JRST	[HRRI	X20505 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.DOR]  
		CAIE	LBEG,ENQX18  
		CAIN	LBEG,IPCFX8  
		JRST	[HRRI	X20506 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.RSX]  
		JRST	[HRRI	X20507 
			PUSHJ	P,ERRRG.   
			PUSHJ	P,XC.QOS]] 
.ENDI     
.ENDE     
;***************************** CAUTION *************************************    
;         
;		TO AVOID LOSING ANY PREVIOUS PATCHES  BE       
;		SURE TO USE THE LATEST PATCHED REL FILES       
;		       AS A BASE FOR THIS EDIT.      
;         
;	    THIS PATCH AFFECTS THE FOLLOWING DBMS COMPONENTS:     
;         
;				DBINFO         
;				DBMEND         
;				LIBOL
;				FORLIB         
;         
;         
;	------------------ TO INSTALL THIS EDIT ------------------
;         
;	@MAKLIB 
;	*DBS20.REL=DBS20.REL,426.FIX/F        
;	*DBSI20.REL=DBSI20.REL,426.FIX/F      
;	*DBMEN2.REL=DBMEN2.REL,426.FIX/F      
;	*^Z     
;	@SUBMIT DBMS20/TAG:DBALL	;DBMS20.CTL FROM DISTRIBUTION TAPE         
;         
;************************** END OF EDIT 426 *******************************     
;******************** START OF DBMS20-V6 EDIT 443 *************************
;
;SYMPTOM
;	When the FFUFP calls in DBMIO detect an error other than FFUFX3,
;	error trap code does not capture the proper error value.
;
;DIAGNOSIS
;	To test for FFUFX3, that value is subtracted from R1. If the error
;	wasn't FFUFX3, the error is trapped with R1 supposedly holding
;	the actual error value.
;
;CURE
;	Fix the error value in R1, by adding FFUFX3 back in, before trapping
;	the error.
;
;*************** EDIT THE FOLLOWING INTO FILE 443.FIX *********************
.EDIT 443
.NAME WTK
.DATE 15-SEP-82
.MODULE DBMIO
.INSERT FF.UFP+6,REPLACE:2,<FFUFP>
	FFUFP
	  JRST	[SUBI	R1,FFUFX3
		 JUMPE	R1,FF.U1
		 ADDI	R1,FFUFX3	;[6%443] RESTORE ERROR VALUE
		 JRST	[HRL	R1
			 HRRI	X19015
			 PUSHJ	17,ERRRG.
			 PUSHJ	17,XC.OS]]
.ENDI
.INSERT FF.U1+2,REPLACE:2,<FFUFP>
	FFUFP
	  JRST	[SUBI	R1,FFUFX3
		 JUMPE	R1,FF.U1+4
		 ADDI	R1,FFUFX3	;[6%443] RESTORE ERROR VALUE
		 JRST	[HRL	R1
			 HRRI	X19016
			 PUSHJ	17,ERRRG.
			 PUSHJ	17,XC.OS]]
.ENDI
.ENDE
;***************************** CAUTION *************************************
;
;		TO AVOID LOSING ANY PREVIOUS PATCHES  BE
;		SURE TO USE THE LATEST PATCHED REL FILES
;		       AS A BASE FOR THIS EDIT.
;
;	    THIS PATCH AFFECTS THE FOLLOWING DBMS COMPONENTS:
;
;				LIBOL
;				FORLIB
;				DBMEND
;				DBINFO
;
;
;	------------------ TO INSTALL THIS EDIT ------------------
;
;	@RUN MAKLIB
;	*DBS20.REL=DBS20.REL,443.FIX/F
;	*DBSI20.REL=DBSI20.REL,443.FIX/F
;	*DBMEN2.REL=DBMEN2.REL,443.FIX/F
;	*^C
;	@SUBMIT DBMS20/TAG:DBALL	;DBMS20.CTL FROM DISTRIBUTION TAPE
;
;************************** END OF EDIT 443 *******************************
;******************** START OF DBMS20-V6 EDIT 447 *************************
;
; [SYMPTOM]
; 
;      When a DBS file which may have multiple  file  sections
; (long  file)  has been opened for retrieval, DBCS can return
; error xx60, error data 19005.  With edit 425 installed, this
; exception will not occur, but exception 0356 can.  There are
; also related instances of exception 0157  when  closing  the
; data base.
; 
; [DIAGNOSIS]
; 
;      If an  attempt  is  made  to  map  in  a  page  from  a
; non-existant  file  section (or sections) while the DBS file
; is opened read-only, the PMAP will fail with  error  LNGFX1.
; This  can  occur  when specifying a direct or calc key for a
; non-existant  page  or  record,  or   more   commonly   when
; clustering  (via transactions) such that a cluster starts in
; an existing file section and ends in a non-existing one.
; 
; Prior to edit 425, the PMAP failure just produced  the  xx60
; (OS)  exception.   Edit 425 attempted to compensate for this
; case by merely removing all the pages that were  mapped  and
; returning  normally, leaving the xx26 (NRS) exceptions to be
; produced by the I/O kernal.  This was insufficient  for  the
; cluster/multi  section  case,  in that it removed valid data
; eventually causing the xx56 (DAT) bad pointer exception.
; 
; In a related situation, if the first page of  a  cluster  is
; non-existant,  the  page is eliminated from the process map,
; and an immediate NRS or UMR exception is generated.  However
; this  leaves  the remaining pages of the cluster mapped with
; no indication in the buffer blocks  that  they  exist.   The
; close  code  will not know that they need to be unmaped, and
; the eventual CLOSF%  will  fail  producing  the  0157  (SOF)
; exception.
; 
; [CURE]
; 
;      Supersede edit 425.  Add a new routine to deal with the
; LNGFX1 error such that the program will continue normally if
; the first page of the map request is not in  a  non-existant
; section.   In  all other cases, generate an immediate NRS or
; UMR exception as appropriate.
; 
; Also, if the first page of a cluster is truely non-existant,
; make sure that all pages for that cluster are unmaped before
; generating the NRS/UMR exception.
; 
; This edit adds the following new exceptions to DBCS:
; 
; SOF/19032 An abortive PMAP failed when erasing cluster pages
; OS/19033  PMAP JSYS read error in .DBS file
; NRS/19034 FIND rse1/rse5 for a record on a non-existant page
; UMR/19035 Non FIND res1/rse5 retrieval from non-existant page
; SOF/19036 An abortive PMAP failed when erasing cluster pages
;
;*************** EDIT THE FOLLOWING INTO FILE 447.FIX *********************
.EDIT 447
.NAME EGM
.DATE 22-Sep-82
.MODULE DBMIO
;***** Remove the following line if edit 425 is not installed *****
.REMOVE 425		;Totally superceded by this edit
.INSERT MGOS.R+16,REPLACE:2,<PMAP>	; Must have ERCAL following it
	PMAP				;MAP THE PAGE(S) FILE TO PROCESS
	  ERCAL	MGO.RE			;[6%447] Lengthy error recovery sub
					;[6%447] Can return as if no error
.ENDI
.INSERT MIOLIT+37,REPLACE:2,<HRRZ R1,PAGIOW(X)>
			PUSHJ	P,ABT.CL	;[6%447] Unmap entire cluster
.ENDI
.INSERT MGOS.R+24,AFTER,<POPJ P,>
MGO.RE:					;[6%447] Handle error from PMAP
					;[6%447]  of DBS file to process.
					;[6%447] Deals with special situation
					;[6%447] of non-existant file sections
					;[6%447] when read-only.
					;[6%447] R1,R2,R3 as of last PMAP
	PURGE	LNGFX1,.FHSLF		;In case edit 425 installed
	LNGFX1==601317			;[6%447] PMAP error of interest
	.FHSLF==400000			;[6%447] Frk handle
	X19032==^D19032			;[6%447] Error data values
	X19033==^D19033			;[6%447]
	X19034==^D19034			;[6%447]
	X19035==^D19035			;[6%447]
	PUSH	P,R3			;[6%447] Used/restored in funny order
	PUSH	P,R2			;[6%447]
	PUSH	P,R1			;[6%447]
	PUSH	P,R3			;[6%447]
	PUSH	P,R2			;[6%447]
	MOVEI	R1,.FHSLF		;[6%447] Must know why it failed
	GETER				;[6%447]
	HRRZS	R2			;[6%447] Isolate error
	CAIE	R2,LNGFX1		;[6%447] No such file section/read-only?
	JRST	[HRL R0,R2		;[6%447] No, something else
		 HRRI	R0,X19005	;[6%447]
		 PUSHJ	P,ERRRG.	;[6%447]
		 PUSHJ	P,XC.OS]	;[6%447]
	SETO	R1,			;[6%447] Yes, prepare for unmap
	POP	P,R2			;[6%447] Process,,page num from PMAP
	HRLI	R3,(PM%ABT!PM%CNT)	;[6%447] Prevent file updating
	PMAP				;[6%447] Remove all pages from cluster
	  ERJMP [HRRI	R0,X19032	;[6%447]
		 PUSHJ	P,ERRRG.	;[6%447]
		 PUSHJ	P,XC.SOF]	;[6%447]
	POP	P,R3			;[6%447] Original flags
	POP	P,R1			;[6%447] JFN,,file page
	HRRZ	R2,R1			;[6%447] Copy page num
	ADDI	R2,-1(R3)		;[6%447] Last page
	TRZ	R2,777			;[6%447] Isolate file section
	CAIG	R2,(R1)			;[6%447] Skip if multiple sections
	JRST	MGO.RN			;[6%447] 1st and all pages non-exist
					;[6%447] Two sections, try first again
	HRRZ	R2,R1			;[6%447] File page number
	TRO	R2,777			;[6%447] Highest page number in section
	SUBI	R2,-1(R1)		;[6%447] Num of pages till end
	HRR	R3,R2			;[6%447] Num to try this time
	POP	P,R2			;[6%447] Orig process,,page num again
	PMAP				;[6%447] Pages from this file section
	  ERJMP [MOVEI	R1,.FHSLF	;[6%447] See if same failure
		 GETER			;[6%447]
		 HRRZS	R2		;[6%447]
		 CAIE	R2,LNGFX1	;[6%447] Still no file section?
		 JRST	[HRL R0,R2	;[6%447] Nope, something else
			 HRRI	R0,X19033 ;[6%447]
			 PUSHJ	P,ERRRG. ;[6%447] 
			 PUSHJ	P,XC.OS] ;[6%447]
		 JRST	MGO.RN]		;[6%447] First set of pages non-existant
	POP	P,R3			;[6%447] First set has existing file sec
	POPJ	P,			;[6%447] Second set does not exist but
					;[6%447]  must defer excep till usage
					;[6%447] Common exceptions when first
MGO.RN:	MOVEI	R1,.FHSLF		;[6%447]  page in non-exist file section
	GETER				;[6%447] Get last error again
	TLNE	SS,(VRO.BI)		;[6%447] Retrieve only verb?
	JRST	[HRL R0,R2		;[6%447] Non-exist direct/calc rec
		 HRRI	R0,X19034	;[6%447]
		 PUSHJ	P,ERRRG.	;[6%447]
		 PUSHJ	P,XC.NRS]	;[6%447]
	JRST	[HRL R0,R2		;[6%447] Some write other than ASR
		 HRRI	R0,X19035	;[6%447]
		 PUSHJ	P,ERRRG.	;[6%447]
		 PUSHJ	P,XC.UMR]	;[6%447]
.ENDI
.INSERT ABT.EX,AFTER,<POPJ P,>
ABT.CL:					;[6%447] Unmap all pages in cluster
					;[6%447]  last used to map from DBS file
	X19036==^D19036			;[6%447] Error data
	PUSH	P,R1			;[6%447]
	PUSH	P,R2			;[6%447]
	PUSH	P,R3			;[6%447]
	SETOM	R1			;[6%447] Unmap
	MOVE	R3,CCLUSZ(X)		;[6%447] Current cluster size
	IMUL	R3,AB.PSIZ(AREABLK)	;[6%447] Pagesize in words
	LSH	R3,-^D9			;[6%447] Actual num of pages
	HRLI	R3,(PM%ABT!PM%CNT)	;[6%447] No file updates
	HRRZ	R2,PAGIOWD(X)		;[6%447] 1st pag addr in clus
	LSH	R2,-^D9			;[6%447] Actual page num
	HRLI	R2,.FHSLF		;[6%447] My process
	PMAP				;[6%447] Clean it up
	  ERJMP [HRRI	R0,X19036	;[6%447]
		 PUSHJ	P,ERRRG.	;[6%447]
		 PUSHJ	P,XC.SOF]	;[6%447]
	POP	P,R3			;[6%447]
	POP	P,R2			;[6%447]
	POP	P,R1			;[6%447]
	POPJ	P,			;[6%447] Return to give exception
.ENDI
.ENDE
;***************************** CAUTION *************************************
;
;		TO AVOID LOSING ANY PREVIOUS PATCHES  BE
;		SURE TO USE THE LATEST PATCHED REL FILES
;		       AS A BASE FOR THIS EDIT.
;THIS PATCH AFFECTS THE FOLLOWING:
;DBMS COMPONENTS:
;	DBINFO
;	DBMEND
;
;LANGUAGE INTERFACES:
;	FORTRAN (FORLIB.REL,DBMSF.EXE)
;	COBOL (LIBOL.REL,LIBO12.EXE,C74LIB.REL,C74O12.EXE)
;	------------------ TO INSTALL THIS EDIT ------------------
;
;	@RUN SYS:MAKLIB
;	*DBS20.REL=DBS20.REL,447.FIX/F
;	*DBSI20.REL=DBSI20.REL,447.FIX/F
;	*DBMEN2.REL=DBMEN2.REL,447.FIX/F
;	*/EXIT
;	@SUBMIT DBMS20/TAG:DBALL	;DBMS20.CTL FROM DISTRIBUTION TAPE
;
;************************** END OF EDIT 447 *******************************
;******************** START OF DBMS20-V6 EDIT 456 *************************
;
;	SEE 456.FIX FOR SYMPTOM/DIAGNOSIS/CURE
;
;*************** EDIT THE FOLLOWING INTO FILE 456.F03 *********************
.EDIT 456
.NAME WTK
.DATE 04-NOV-82
.MODULE DBMLOK
PSW.NR==200000			;PSW FLAG 'DONT RELEASE LOCKS'
.INSERT ULK.JR+1,BEFORE,<HRRZ LKBLK,LK.BLK(SS)>
	TLNE	X,PSW.NRL	;IF DBMEND DOESN'T WANT JRN LOCKS RELEASED
	JRST	ULK.JR+17	;   DON'T RELEASE THEM
.ENDI
.ENDE
;***************************** CAUTION *************************************
;
;	SEE 456.FIX FOR INSTALLATION INSTRUCTIONS
;
;************************** END OF EDIT 456 *******************************