Explorar el Código

improved GC slightly

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7237 8c9fc860-2736-0410-a75d-ab315db34111
felixf hace 8 años
padre
commit
396f6e6604
Se han modificado 1 ficheros con 5 adiciones y 0 borrados
  1. 5 0
      source/Heaps.Mod

+ 5 - 0
source/Heaps.Mod

@@ -1096,9 +1096,14 @@ BEGIN
 	p := NIL;
 	IF  (GC = NilGC) OR (throughput < 128*1024*1024) THEN
 		GetFreeBlock(size, p);
+		IF  (p=NIL) THEN (* try restart sweep for once *)
+			GetFreeBlock(size, p);
+		END;
 	ELSE
 		throughput := 0;
 	END;
+
+	
 	WHILE (p = NIL) & (try <= MaxTries) DO
 		Machine.Release(Machine.Heaps);	(* give up control *)
 		GC;	(* try to free memory (other processes may also steal memory now) *)