Forráskód Böngészése

Fixed unintended sharing of a counter variable in CurrentProcessTime.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6693 8c9fc860-2736-0410-a75d-ab315db34111
eth.tmartiel 9 éve
szülő
commit
25586e5a33
1 módosított fájl, 9 hozzáadás és 3 törlés
  1. 9 3
      source/Objects.Mod

+ 9 - 3
source/Objects.Mod

@@ -396,7 +396,6 @@ VAR
 
 	entry: ADDRESS;
 	init: Process;
-	i: LONGINT;
 
 	(* Performance monitoring *)
 	idlecount*: ARRAY Machine.MaxCPU OF LONGINT; (** count of idle process timeslice interrupts *)
@@ -794,7 +793,7 @@ BEGIN
 END GetCpuCycles;
 
 PROCEDURE CurrentProcessTime*(): HUGEINT;
-VAR result: HUGEINT; process: Process;
+VAR result: HUGEINT; process: Process; i: LONGINT;
 BEGIN
 	process := CurrentProcess();
 	FOR i := 0 TO Machine.MaxCPU-1 DO result := result + process.cpuCycles[i]; END;
@@ -1783,6 +1782,13 @@ BEGIN
 	RETURN gcStatusExt
 END GCStatusFactory;
 
+PROCEDURE InitPrioRequest;
+VAR
+	i: LONGINT;
+BEGIN
+	FOR i := 0 TO LEN(init.prioRequests) - 1 DO init.prioRequests[i] := 0 END;
+END InitPrioRequest;
+
 BEGIN
 	IF Stats THEN InitStats; END;
 	Init;
@@ -1804,7 +1810,7 @@ BEGIN
 	init.priority := High;
 	init.staticPriority := init.priority;
 	(* initialize prioRequests for init process *)
-	FOR i := 0 TO LEN(init.prioRequests) - 1 DO init.prioRequests[i] := 0 END;
+	InitPrioRequest;
 	INC(init.prioRequests[init.priority]);
 	Machine.Acquire(Machine.Objects);
 	init.id := -1; Enter(init); init := NIL;