OSDN Git Service

* cygtls.h (_threadinfo::find_tls): New function.
authorcgf <cgf>
Sun, 7 Dec 2003 02:56:52 +0000 (02:56 +0000)
committercgf <cgf>
Sun, 7 Dec 2003 02:56:52 +0000 (02:56 +0000)
* exceptions.cc (_threadinfo::find_tls): Rename from find_tls.  Use critical
section to protect access to linked list.

winsup/cygwin/ChangeLog
winsup/cygwin/cygtls.h
winsup/cygwin/exceptions.cc

index 8b5fef6..832b39f 100644 (file)
@@ -1,5 +1,11 @@
 2003-12-06  Christopher Faylor  <cgf@redhat.com>
 
+       * cygtls.h (_threadinfo::find_tls): New function.
+       * exceptions.cc (_threadinfo::find_tls): Rename from find_tls.  Use
+       critical section to protect access to linked list.
+
+2003-12-06  Christopher Faylor  <cgf@redhat.com>
+
        * exceptions.cc (_threadinfo::remove): Avoid returning without
        unlocking critical section in the (hopefully impossible) case of an
        unrecognized thread.
index 20913be..f62efed 100644 (file)
@@ -46,6 +46,7 @@ struct _threadinfo
   void init_thread (void *);
   static void call (void (*) (void *, void *), void *);
   void call2 (void (*) (void *, void *), void *, void *);
+  static struct _threadinfo *find_tls (int sig);
   void remove ();
   void push (__stack_t, bool = false);
   __stack_t pop ();
index aba96ec..ea2c7e6 100644 (file)
@@ -988,11 +988,13 @@ set_signal_mask (sigset_t newmask, sigset_t& oldmask)
 }
 
 _threadinfo *
-find_tls (int sig)
+_threadinfo::find_tls (int sig)
 {
+  EnterCriticalSection (&protect_linked_list);
   for (_threadinfo *t = _last_thread; t ; t = t->prev)
     if (sigismember (&t->sigwait_mask, sig))
       return t;
+  LeaveCriticalSection (&protect_linked_list);
   return NULL;
 }
 
@@ -1023,7 +1025,7 @@ sig_handle (int sig, sigset_t mask, int pid, _threadinfo *tls)
          || ISSTATE (myself, PID_STOPPED)))
     {
       sigproc_printf ("signal %d blocked", sig);
-      if (insigwait_mask || (tls = find_tls (sig)) != NULL)
+      if (insigwait_mask || (tls = _threadinfo::find_tls (sig)) != NULL)
        goto thread_specific;
       rc = -1;
       goto done;