improved checking
This commit is contained in:
		
							parent
							
								
									7dcfb2b4ad
								
							
						
					
					
						commit
						94bb3d3e04
					
				
					 1 changed files with 13 additions and 6 deletions
				
			
		|  | @ -80,6 +80,7 @@ IMPLEMENTATION MODULE Storage; | ||||||
| 				pc := ADR(p^.BSTORE) + size; | 				pc := ADR(p^.BSTORE) + size; | ||||||
| 				pc^ := MAGICC; | 				pc^ := MAGICC; | ||||||
| 			END; | 			END; | ||||||
|  | 			p^.BSIZE := size; | ||||||
| 			RETURN ADR(p^.BSTORE); | 			RETURN ADR(p^.BSTORE); | ||||||
| 		END; | 		END; | ||||||
| 
 | 
 | ||||||
|  | @ -103,6 +104,7 @@ IMPLEMENTATION MODULE Storage; | ||||||
| 					pc := ADR(q^.BSTORE) + size; | 					pc := ADR(q^.BSTORE) + size; | ||||||
| 					pc^ := MAGICC; | 					pc^ := MAGICC; | ||||||
| 				END; | 				END; | ||||||
|  | 				q^.BSIZE := size; | ||||||
| 				RETURN ADR(q^.BSTORE); | 				RETURN ADR(q^.BSTORE); | ||||||
| 			END; | 			END; | ||||||
| 		END; | 		END; | ||||||
|  | @ -138,6 +140,7 @@ IMPLEMENTATION MODULE Storage; | ||||||
| 					pc := ADR(p^.BSTORE) + size; | 					pc := ADR(p^.BSTORE) + size; | ||||||
| 					pc^ := MAGICC; | 					pc^ := MAGICC; | ||||||
| 				END; | 				END; | ||||||
|  | 				p^.BSIZE := size; | ||||||
| 				RETURN ADR(p^.BSTORE); | 				RETURN ADR(p^.BSTORE); | ||||||
| 			END; | 			END; | ||||||
| 			(* Give part of tail of original block. | 			(* Give part of tail of original block. | ||||||
|  | @ -151,6 +154,7 @@ IMPLEMENTATION MODULE Storage; | ||||||
| 				pc := ADR(q^.BSTORE) + size; | 				pc := ADR(q^.BSTORE) + size; | ||||||
| 				pc^ := MAGICC; | 				pc^ := MAGICC; | ||||||
| 			END; | 			END; | ||||||
|  | 			q^.BSIZE := size; | ||||||
| 			RETURN ADR(q^.BSTORE); | 			RETURN ADR(q^.BSTORE); | ||||||
| 		END; | 		END; | ||||||
| 	END; | 	END; | ||||||
|  | @ -176,6 +180,7 @@ IMPLEMENTATION MODULE Storage; | ||||||
| 		pc := ADR(p^.BSTORE) + size; | 		pc := ADR(p^.BSTORE) + size; | ||||||
| 		pc^ := MAGICC; | 		pc^ := MAGICC; | ||||||
| 	END; | 	END; | ||||||
|  | 	p^.BSIZE := size; | ||||||
| 	RETURN ADR(p^.BSTORE); | 	RETURN ADR(p^.BSTORE); | ||||||
|   END MyAllocate; |   END MyAllocate; | ||||||
| 
 | 
 | ||||||
|  | @ -214,22 +219,24 @@ IMPLEMENTATION MODULE Storage; | ||||||
| 	pc: POINTER TO CHAR; | 	pc: POINTER TO CHAR; | ||||||
|   BEGIN |   BEGIN | ||||||
| 	IF (a = NIL) THEN  | 	IF (a = NIL) THEN  | ||||||
| 		Message("(Warning) NIL pointer deallocated"); | 		Message("(Warning) Deallocate: NIL pointer deallocated"); | ||||||
| 		RETURN; | 		RETURN; | ||||||
| 	END; | 	END; | ||||||
| 	p := a - UNIT; | 	p := a - UNIT; | ||||||
| 	IF (p^.BNEXT # BucketPtr(USED)) THEN | 	IF (p^.BNEXT # BucketPtr(USED)) THEN | ||||||
| 		Message("(Warning) area already deallocated or heap corrupted"); | 		Message("(Warning) Deallocate: area already deallocated or heap corrupted"); | ||||||
| 		a := NIL; | 		a := NIL; | ||||||
| 		RETURN; | 		RETURN; | ||||||
| 	END; | 	END; | ||||||
| 	WITH p^ DO | 	WITH p^ DO | ||||||
| 		IF BSIZE # ((size + (UNIT - 1)) DIV UNIT) THEN | 		IF BSIZE # size THEN | ||||||
| 			Message("(Warning) wrong size in deallocate"); | 			Message("(Warning) Deallocate: wrong size or heap corrupted"); | ||||||
| 		ELSIF (BSIZE*UNIT # size) THEN | 		END; | ||||||
|  | 		BSIZE := (size + (UNIT - 1)) DIV UNIT; | ||||||
|  | 		IF (BSIZE*UNIT # size) THEN | ||||||
| 			pc := a + size; | 			pc := a + size; | ||||||
| 			IF pc^ # MAGICC THEN | 			IF pc^ # MAGICC THEN | ||||||
| 				Message("(Warning) heap corrupted or wrong size in deallocate"); | 				Message("(Warning) Deallocate: heap corrupted"); | ||||||
| 			END; | 			END; | ||||||
| 		END;	 | 		END;	 | ||||||
| 		IF BSIZE <= NLISTS THEN | 		IF BSIZE <= NLISTS THEN | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue