changeset 439:3e3067d83e1f

* src/signal.cxx: Changed the three routines added in the last change so that they can be called safely from non-POSIX threads.
author nickg
date Tue, 26 Nov 2002 18:16:45 +0000
parents 4ad7466aa844
children d2722bc50510
files packages/compat/posix/current/ChangeLog packages/compat/posix/current/src/signal.cxx
diffstat 2 files changed, 26 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/packages/compat/posix/current/ChangeLog
+++ b/packages/compat/posix/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-11-26  Nick Garnett  <nickg@ecoscentric.com>
+
+	* src/signal.cxx: Changed the three routines added in the last
+	change so that they can be called safely from non-POSIX threads.
+
 2002-11-10  Nick Garnett  <nickg@ecoscentric.com>
 
 	* src/signal.cxx: Added three exportable routines that may be used
--- a/packages/compat/posix/current/src/signal.cxx
+++ b/packages/compat/posix/current/src/signal.cxx
@@ -725,11 +725,14 @@ externC void cyg_pthread_sigmask_set (co
 {
     pthread_info *self = pthread_self_info();
 
-    if( oset != NULL )
-        *oset = self->sigmask;
+    if( self != NULL )
+    {
+        if( oset != NULL )
+            *oset = self->sigmask;
 
-    if( set != NULL )
-        self->sigmask = *set;
+        if( set != NULL )
+            self->sigmask = *set;
+    }
 }
 
 // -------------------------------------------------------------------------
@@ -744,6 +747,9 @@ externC cyg_bool cyg_posix_sigpending(vo
 {
     pthread_info *self = pthread_self_info();
 
+    if( self == NULL )
+        return false;
+    
     return ( ((sig_pending | self->sigpending) & ~self->sigmask) != 0 );
 }
 
@@ -760,16 +766,19 @@ externC void cyg_posix_deliver_signals( 
     sigset_t oldmask;
     pthread_info *self = pthread_self_info();
 
-    if( mask != NULL )
+    if( self != NULL )
     {
-        oldmask = self->sigmask;
-        self->sigmask = *mask;
+        if( mask != NULL )
+        {
+            oldmask = self->sigmask;
+            self->sigmask = *mask;
+        }
+
+        cyg_deliver_signals();
+
+        if( mask != NULL )        
+            self->sigmask = oldmask;
     }
-
-    cyg_deliver_signals();
-
-    if( mask != NULL )        
-        self->sigmask = oldmask;
 }
 
 // -------------------------------------------------------------------------