about summary refs log tree commit diff
path: root/linuxthreads
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog3
-rw-r--r--linuxthreads/pthread.c20
-rw-r--r--linuxthreads/spinlock.c4
3 files changed, 19 insertions, 8 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 0530c63506..f9a3bf9240 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,5 +1,8 @@
 2000-04-15  Ulrich Drepper  <drepper@redhat.com>
 
+	* pthread.c (pthread_initialize): Avoid a bit more code if
+	realtime signals are known to exist.
+
 	* pthread.c: Is __ASSUME_REALTIME_SIGNALS then avoid generating code
 	to dynamically detect RT signals and avoid generating compatibility
 	functions with old kernel.
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index 3ceb33562e..eca90635b0 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -369,10 +369,12 @@ static void pthread_initialize(void)
 #ifndef __i386__
   sa.sa_handler = pthread_handle_sigrestart;
 #else
-  if (__pthread_sig_restart >= SIGRTMIN)
-    sa.sa_handler = (__sighandler_t) pthread_handle_sigrestart_rt;
-  else
+# if !__ASSUME_REALTIME_SIGNALS
+  if (__pthread_sig_restart < SIGRTMIN)
     sa.sa_handler = (__sighandler_t) pthread_handle_sigrestart_nonrt;
+  else
+# endif
+    sa.sa_handler = (__sighandler_t) pthread_handle_sigrestart_rt;
 #endif
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = 0;
@@ -380,10 +382,12 @@ static void pthread_initialize(void)
 #ifndef __i386__
   sa.sa_handler = pthread_handle_sigcancel;
 #else
-  if (__pthread_sig_restart >= SIGRTMIN)
-    sa.sa_handler = (__sighandler_t) pthread_handle_sigcancel_rt;
-  else
+# if !__ASSUME_REALTIME_SIGNALS
+  if (__pthread_sig_restart < SIGRTMIN)
     sa.sa_handler = (__sighandler_t) pthread_handle_sigcancel_nonrt;
+  else
+# endif
+    sa.sa_handler = (__sighandler_t) pthread_handle_sigcancel_rt;
 #endif
   sa.sa_flags = 0;
   __sigaction(__pthread_sig_cancel, &sa, NULL);
@@ -664,11 +668,13 @@ static void pthread_handle_sigrestart(int sig)
 }
 
 #ifdef __i386__
+# if !__ASSUME_REALTIME_SIGNALS
 static void pthread_handle_sigrestart_nonrt(int sig, struct sigcontext ctx)
 {
   asm volatile ("movw %w0,%%gs" : : "r" (ctx.gs));
   pthread_handle_sigrestart(sig);
 }
+# endif
 
 static void pthread_handle_sigrestart_rt(int sig, struct siginfo *si,
 					 struct ucontext *uc)
@@ -713,11 +719,13 @@ static void pthread_handle_sigcancel(int sig)
 }
 
 #ifdef __i386__
+# if !__ASSUME_REALTIME_SIGNALS
 static void pthread_handle_sigcancel_nonrt(int sig, struct sigcontext ctx)
 {
   asm volatile ("movw %w0,%%gs" : : "r" (ctx.gs));
   pthread_handle_sigcancel(sig);
 }
+# endif
 
 static void pthread_handle_sigcancel_rt(int sig, struct siginfo *si,
 					 struct ucontext *uc)
diff --git a/linuxthreads/spinlock.c b/linuxthreads/spinlock.c
index ac94001bda..d13cea18c7 100644
--- a/linuxthreads/spinlock.c
+++ b/linuxthreads/spinlock.c
@@ -56,7 +56,7 @@ void internal_function __pthread_lock(pthread_spinlock_t * lock,
       THREAD_SETMEM(self, p_nextlock, (pthread_descr) oldstatus);
       /* Make sure the store in p_nextlock completes before performing
          the compare-and-swap */
-      WRITE_MEMORY_BARRIER();
+      MEMORY_BARRIER();
     }
   } while(! compare_and_swap(&lock->__status, oldstatus, newstatus,
                              &lock->__spinlock));
@@ -144,7 +144,7 @@ again:
   }
   /* Prevent reordering of store to *maxptr above and store to thr->p_nextlock
      below */
-  MEMORY_BARRIER();
+  WRITE_MEMORY_BARRIER();
   /* Wake up the selected waiting thread */
   thr->p_nextlock = NULL;
   restart(thr);