瀏覽代碼

Bootconsole works again (main thread may not be terminated)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6968 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 年之前
父節點
當前提交
394f0afd43
共有 1 個文件被更改,包括 25 次插入13 次删除
  1. 25 13
      source/Generic.Unix.Objects.Mod

+ 25 - 13
source/Generic.Unix.Objects.Mod

@@ -917,27 +917,39 @@ TYPE
 		StartTimerActivity;
 		
 		NEW( finalizerCaller );
-		(*
-		Heaps.saveSP := SaveSP;
-		*)
 		Heaps.gcStatus := GCStatusFactory()
-		(*
-		Heaps.GC := InvokeGC;
-		Heaps.InvokeGC := InvokeGC;
-		*)
 	END Init;
+
+TYPE 
+	MainThread = OBJECT
+	VAR exit: BOOLEAN;
+		
+		PROCEDURE&  Init;
+		BEGIN
+			exit := FALSE;
+		END Init;
+		
+		PROCEDURE Await();
+		BEGIN{EXCLUSIVE}
+			AWAIT(exit);
+		END Await;
+
+	END MainThread;
 	
+	VAR main: MainThread;
+	
+	PROCEDURE MainThreadSleep;
+	BEGIN
+		NEW(main);
+		main.Await();
+		Unix.exit(0);
+	END MainThreadSleep;
 	
 	PROCEDURE {FINAL} Final;
 	BEGIN
-		TRACE("Main Thread is terminating.");
-		(* LOOP Unix.ThrSleep( 10 ) END; *)
-		(*
-		Machine.Shutdown(FALSE);
-		*)
+		MainThreadSleep;
 	END Final;
 
-
 	PROCEDURE GCStatusFactory(): Heaps.GCStatus;
 	VAR gcStatusExt : GCStatusExt;
 	BEGIN