thread safe longjmp functions.
[kopensolaris-gnu/glibc.git] / linuxthreads / internals.h
index 7939605..c568296 100644 (file)
@@ -84,6 +84,9 @@ struct _pthread_descr_struct {
   struct pthread_start_args p_start_args; /* arguments for thread creation */
   void ** p_specific[PTHREAD_KEY_1STLEVEL_SIZE]; /* thread-specific data */
   void * p_libc_specific[_LIBC_TSD_KEY_N]; /* thread-specific data for libc */
+  int p_userstack;             /* nonzero if the user provided the thread */
+  void *p_guardaddr;           /* address of guard area or NULL */
+  size_t p_guardsize;          /* size of guard area */
 };
 
 /* The type of thread handles. */
@@ -247,6 +250,23 @@ static inline pthread_descr thread_self (void)
 #endif
 }
 
+/* Max number of times we must spin on a spinlock calling sched_yield().
+   After MAX_SPIN_COUNT iterations, we put the calling thread to sleep. */
+
+#ifndef MAX_SPIN_COUNT
+#define MAX_SPIN_COUNT 50
+#endif
+
+/* Duration of sleep (in nanoseconds) when we can't acquire a spinlock
+   after MAX_SPIN_COUNT iterations of sched_yield().
+   With the 2.0 and 2.1 kernels, this MUST BE > 2ms.
+   (Otherwise the kernel does busy-waiting for realtime threads,
+    giving other threads no chance to run.) */
+
+#ifndef SPIN_SLEEP_DURATION
+#define SPIN_SLEEP_DURATION 2000001
+#endif
+
 /* Debugging */
 
 #ifdef DEBUG