Przeglądaj źródła

minor updates

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7286 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 8 lat temu
rodzic
commit
4486676435

+ 3 - 3
source/Generic.Solaris.I386.Glue.Mod

@@ -264,7 +264,7 @@ Compiler.Compile -p=Linux32G
 		I386.Reals.Mod  Unix.Clock.Mod  Dates.Mod  Strings.Mod  Diagnostics.Mod 
 		GenericLinker.Mod  GenericLoader.Mod  Unix.BootConsole.Mod 
 		
-		SolarisELF.Mod 
+		ElfBinary.Mod 
 		~
 		
 		
@@ -280,6 +280,6 @@ StaticLinker.Link
 		~
 
  
- Build 'Solaris32G.elf' by concatenating 'A2Loader.elf' (C) and 'Solaris32G.core' (Oberon).	
+ Build 'SolarisA2' by concatenating 'A2Loader.elf' (C) and 'Solaris32G.core' (Oberon).	
  
- SolarisELF.Build Solaris32G.elf ~
+ ElfBinary.Build  Solaris32G.core -> SolarisA2 ~

+ 6 - 19
source/Generic.Solaris.I386.Unix.Mod

@@ -576,14 +576,10 @@ VAR
 	VAR suspendHandler*: PROCEDURE( c: Ucontext );
 	
 	PROCEDURE {C} SigHandler( sig: LONGINT; scp: ADDRESS; ucp: Ucontext ); (* reversed arguments !! *)
-	VAR r: LONGINT;  thr: Thread_t;
 	BEGIN
 		IF sig = SIGUSR1 THEN
 			suspendHandler( ucp );
-			thr := pthread_self( );
-			r := thr_suspend( thr )
-		ELSIF sig = SIGUSR2 THEN
-			suspendHandler( ucp );
+			handler_done := TRUE;
 		ELSIF trap # NIL THEN 
 			trap( sig, scp, ucp, 0 );
 		ELSE
@@ -623,15 +619,12 @@ VAR
 			IF i # 9 THEN InstallHandler( i ) END;
 		END;
 		InstallHandler( SIGUSR1 );
-		InstallHandler( SIGUSR2 );
 	END InitSignalHandler;
 	
 	(*-------------------------------------------------------------------------------------------------------------*)
 	
 	
 	PROCEDURE ThrInitialize*( VAR low, high: LONGINT ): BOOLEAN;
-	VAR
-		param: Sched_param;
 	BEGIN	    
 		ASSERT( pthread_mutex_init( ADDRESSOF( suspend_mutex ), NIL ) = 0);
 		mainthread := pthread_self();
@@ -654,22 +647,16 @@ VAR
 	VAR r: LONGINT;
 	BEGIN
 		IF saveContext THEN
+			handler_done := FALSE;
 			r := pthread_kill( thr, SIGUSR1 );	
-			(*	not working in Solaris when the thread is stalled 
-				in a mutex.
+			(*	not working in Solaris when the thread is stalled in a mutex.
 				handler gets arrived but has bad side effects, 
 				yields traps and locks the system *)
-		ELSE
-			r := thr_suspend( thr )
-		END
+			WHILE ~handler_done DO  ThrSleep( 1 )  END;
+		END;
+		r := thr_suspend( thr )
 	END ThrSuspend;	
 
-	PROCEDURE GetThreadContext*( thr: Thread_t );
-	VAR r: LONGINT;
-	BEGIN
-		r := pthread_kill( thr, SIGUSR2 );	
-	END GetThreadContext;
-	
 	
 	PROCEDURE SetSigaltstack;
 	VAR sigstk: Stack;

BIN
source/Generic.SolarisA2.Tool