Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-12-07 06:27:51 +0300
committerChristopher Faylor <me@cgf.cx>2003-12-07 06:27:51 +0300
commitae2543ed76f3271061bffc0549961aa74baba64f (patch)
tree2e342d323ba7fea34985fed87c67a44332ab7aad /winsup/cygwin
parent73262d7a44b90e2338fe031ebeaa17c7a299d547 (diff)
* exceptions.cc (_threadinfo::remove): Avoid a linked list walk.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog4
-rw-r--r--winsup/cygwin/exceptions.cc16
2 files changed, 11 insertions, 9 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 832b39f1e..4da0b4167 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,9 @@
2003-12-06 Christopher Faylor <cgf@redhat.com>
+ * exceptions.cc (_threadinfo::remove): Avoid a linked list walk.
+
+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.
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index ea2c7e6d5..feb36327c 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -188,17 +188,15 @@ _threadinfo::init_thread (void *)
void
_threadinfo::remove ()
{
- _threadinfo *t;
EnterCriticalSection (&protect_linked_list);
- for (t = _last_thread; t && t != this; t = t->prev)
- continue;
- if (t)
+ if (prev)
{
- t->prev->next = t->next;
- if (t->next)
- t->next->prev = t->prev;
- if (t == _last_thread)
- _last_thread = t->prev;
+ prev->next = next;
+ if (next)
+ next->prev = prev;
+ if (this == _last_thread)
+ _last_thread = prev;
+ prev = next = NULL;
}
LeaveCriticalSection (&protect_linked_list);
}