diff options
author | Christopher Faylor <me@cgf.cx> | 2003-12-07 06:27:51 +0300 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2003-12-07 06:27:51 +0300 |
commit | ae2543ed76f3271061bffc0549961aa74baba64f (patch) | |
tree | 2e342d323ba7fea34985fed87c67a44332ab7aad | |
parent | 73262d7a44b90e2338fe031ebeaa17c7a299d547 (diff) |
* exceptions.cc (_threadinfo::remove): Avoid a linked list walk.
-rw-r--r-- | winsup/cygwin/ChangeLog | 4 | ||||
-rw-r--r-- | winsup/cygwin/exceptions.cc | 16 |
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); } |