about summary refs log tree commit diff
path: root/linuxthreads
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog7
-rw-r--r--linuxthreads/spinlock.c11
2 files changed, 13 insertions, 5 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 5d06c1c572..fe1a4ed2e0 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,10 @@
+2000-07-18 Kaz Kylheku <kaz@ashi.footprints.net>
+
+	* spinlock.c (__pthread_alt_lock, __pthread_alt_timedlock): Fixed
+	bug whereby thr field of waitnode structure would not be correctly
+	set unless a null self pointer is passed to the functions.
+	Eliminated redundant calls to thread_self().
+
 2000-07-18  Jakub Jelinek  <jakub@redhat.com>
 
 	* pthread.c (__pthread_initialize_manager): Lock
diff --git a/linuxthreads/spinlock.c b/linuxthreads/spinlock.c
index 38d6b8ef30..43190a2eda 100644
--- a/linuxthreads/spinlock.c
+++ b/linuxthreads/spinlock.c
@@ -345,7 +345,7 @@ static void wait_node_dequeue(struct wait_node **pp_head,
   if (pp_node == pp_head) {
     long oldvalue = (long) p_node;
     long newvalue = (long) p_node->next;
-       
+
     if (__compare_and_swap((long *) pp_node, oldvalue, newvalue))
       return;
 
@@ -388,7 +388,7 @@ void __pthread_alt_lock(struct _pthread_fastlock * lock,
 
       wait_node.abandoned = 0;
       wait_node.next = (struct wait_node *) lock->__status;
-      wait_node.thr = self = thread_self();
+      wait_node.thr = self;
       suspend_needed = 1;
     }
 
@@ -408,7 +408,8 @@ void __pthread_alt_lock(struct _pthread_fastlock * lock,
       newstatus = 1;
     } else {
       if (self == NULL)
-	wait_node.thr = self = thread_self();
+	self = thread_self();
+      wait_node.thr = self;
       newstatus = (long) &wait_node;
     }
     wait_node.abandoned = 0;
@@ -461,7 +462,7 @@ int __pthread_alt_timedlock(struct _pthread_fastlock * lock,
 
       p_wait_node->abandoned = 0;
       p_wait_node->next = (struct wait_node *) lock->__status;
-      p_wait_node->thr = self = thread_self();
+      p_wait_node->thr = self;
     }
 
     WRITE_MEMORY_BARRIER();
@@ -478,7 +479,7 @@ int __pthread_alt_timedlock(struct _pthread_fastlock * lock,
       newstatus = 1;
     } else {
       if (self == NULL)
-	p_wait_node->thr = self = thread_self();
+	p_wait_node->thr = self;
       newstatus = (long) p_wait_node;
     }
     p_wait_node->abandoned = 0;