瀏覽代碼

Use return to exit from thread routines

git-svn-id: https://svn-dept.inf.ethz.ch/svn/lecturers/a2/trunk@8811 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 年之前
父節點
當前提交
f93a9dd647
共有 3 個文件被更改,包括 6 次插入6 次删除
  1. 2 2
      source/Unix.Environment.Mod
  2. 2 2
      source/Unix.Processors.Mod
  3. 2 2
      source/Unix.StdIO.Mod

+ 2 - 2
source/Unix.Environment.Mod

@@ -68,10 +68,10 @@ BEGIN {UNCOOPERATIVE, UNCHECKED}
 	END;
 END Enqueue;
 
-PROCEDURE TimerThread;
+PROCEDURE {C} TimerThread (): ADDRESS;
 BEGIN {UNCOOPERATIVE, UNCHECKED}
 	Activities.CallVirtual (TickLoop, NIL, Activities.CreateVirtualProcessor ());
-	Unix.pthread_exit (0);
+	RETURN NIL;
 END TimerThread;
 
 PROCEDURE TickLoop (argument: ADDRESS);

+ 2 - 2
source/Unix.Processors.Mod

@@ -42,13 +42,13 @@ BEGIN {UNCOOPERATIVE, UNCHECKED}
 END StartAll;
 
 (* Start routine for each Posix thread. *)
-PROCEDURE {NORETURN} Start (arg: ADDRESS);
+PROCEDURE {C} Start (arg: ADDRESS): ADDRESS;
 PROCEDURE Execute EXTERN "Activities.Execute" (procedure: PROCEDURE);
 PROCEDURE Idle EXTERN "Activities.Idle";
 BEGIN {UNCOOPERATIVE, UNCHECKED}
 	StartAll;
 	Execute (Idle);
-	Unix.pthread_exit (0);
+	RETURN NIL;
 END Start;
 
 (** Initializes the module by enumerating all available processors. *)

+ 2 - 2
source/Unix.StdIO.Mod

@@ -53,10 +53,10 @@ END Args;
 	VAR reader: Unix.Thread_t;
 	VAR read : RECORD buffer: ADDRESS; size, result: SIZE; ready: BOOLEAN END;
 
-	PROCEDURE ReaderThread;
+	PROCEDURE {C} ReaderThread (): ADDRESS;
 	BEGIN {UNCOOPERATIVE, UNCHECKED}
 		Activities.CallVirtual (ReadActivity, NIL, processor);
-		Unix.pthread_exit (0);
+		RETURN NIL;
 	END ReaderThread;
 
 	PROCEDURE ReadActivity (p: ADDRESS);