Browse Source

Peter Mazinger pointed out that my last commit was faulty.
This should fix it.

Joakim Tjernlund 18 years ago
parent
commit
c8141d994e

+ 1 - 1
libc/misc/internals/__uClibc_main.c

@@ -400,7 +400,7 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc,
     exit(main(argc, argv, __environ));
 }
 
-#ifdef __UCLIBC_HAS_THREADS__
+#if defined(__UCLIBC_HAS_THREADS__) && !defined(SHARED)
 /* Weaks for internal library use only.
  *
  * We need to define weaks here to cover all the pthread functions that

+ 2 - 0
libpthread/linuxthreads.old/forward.c

@@ -140,5 +140,7 @@ FORWARD (pthread_setcancelstate, (int state, int *oldstate), (state, oldstate),
 FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
 
 FORWARD2 (_pthread_cleanup_push, void, (struct _pthread_cleanup_buffer * buffer, void (*routine)(void *), void * arg), (buffer, routine, arg), return)
+FORWARD2 (_pthread_cleanup_push_defer, void, (struct _pthread_cleanup_buffer * buffer, void (*routine)(void *), void * arg), (buffer, routine, arg), return)
 
 FORWARD2 (_pthread_cleanup_pop, void, (struct _pthread_cleanup_buffer * buffer, int execute), (buffer, execute), return)
+FORWARD2 (_pthread_cleanup_pop_restore, void, (struct _pthread_cleanup_buffer * buffer, int execute), (buffer, execute), return)

+ 2 - 0
libpthread/linuxthreads.old/pthread.c

@@ -336,6 +336,8 @@ struct pthread_functions __pthread_functions =
     .ptr__pthread_cleanup_push = _pthread_cleanup_push,
     .ptr__pthread_cleanup_pop = _pthread_cleanup_pop
 */
+    .ptr__pthread_cleanup_push_defer = _pthread_cleanup_push_defer,
+    .ptr__pthread_cleanup_pop_restore = _pthread_cleanup_pop_restore,
   };
 #ifdef SHARED
 # define ptr_pthread_functions &__pthread_functions

+ 4 - 1
libpthread/linuxthreads.old/sysdeps/pthread/pthread-functions.h

@@ -84,9 +84,12 @@ struct pthread_functions
 				       const struct timespec *);
   void (*ptr__pthread_cleanup_push) (struct _pthread_cleanup_buffer * buffer,
 				     void (*routine)(void *), void * arg);
-
+  void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer * buffer,
+					   void (*routine)(void *), void * arg);
   void (*ptr__pthread_cleanup_pop) (struct _pthread_cleanup_buffer * buffer,
 				    int execute);
+  void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer * buffer,
+					    int execute);
 };
 
 /* Variable in libc.so.  */

+ 5 - 2
libpthread/linuxthreads/forward.c

@@ -17,11 +17,13 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <dlfcn.h>
+#include <features.h>
 #include <stdlib.h>
+#include <dlfcn.h>
 
 /* psm: keep this before internals.h */
 libc_hidden_proto(exit)
+
 #include "internals.h"
 
 /* Pointers to the libc functions.  */
@@ -129,7 +131,6 @@ strong_alias(pthread_mutex_trylock, __pthread_mutex_trylock)
 FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)
 strong_alias(pthread_mutex_unlock, __pthread_mutex_unlock)
 
-
 FORWARD2 (pthread_self, pthread_t, (void), (), return 0)
 
 
@@ -139,5 +140,7 @@ FORWARD (pthread_setcancelstate, (int state, int *oldstate), (state, oldstate),
 FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
 
 FORWARD2 (_pthread_cleanup_push, void, (struct _pthread_cleanup_buffer * buffer, void (*routine)(void *), void * arg), (buffer, routine, arg), return)
+FORWARD2 (_pthread_cleanup_push_defer, void, (struct _pthread_cleanup_buffer * buffer, void (*routine)(void *), void * arg), (buffer, routine, arg), return)
 
 FORWARD2 (_pthread_cleanup_pop, void, (struct _pthread_cleanup_buffer * buffer, int execute), (buffer, execute), return)
+FORWARD2 (_pthread_cleanup_pop_restore, void, (struct _pthread_cleanup_buffer * buffer, int execute), (buffer, execute), return)

+ 3 - 1
libpthread/linuxthreads/pthread.c

@@ -278,7 +278,9 @@ struct pthread_functions __pthread_functions =
     .ptr_pthread_sigwait = __pthread_sigwait,
     .ptr_pthread_raise = __pthread_raise,
     .ptr__pthread_cleanup_push = _pthread_cleanup_push,
-    .ptr__pthread_cleanup_pop = _pthread_cleanup_pop
+    .ptr__pthread_cleanup_push_defer = _pthread_cleanup_push_defer,
+    .ptr__pthread_cleanup_pop = _pthread_cleanup_pop,
+    .ptr__pthread_cleanup_pop_restore = _pthread_cleanup_pop_restore,
   };
 #ifdef SHARED
 # define ptr_pthread_functions &__pthread_functions

+ 4 - 1
libpthread/linuxthreads/sysdeps/pthread/pthread-functions.h

@@ -84,9 +84,12 @@ struct pthread_functions
 				       const struct timespec *);
   void (*ptr__pthread_cleanup_push) (struct _pthread_cleanup_buffer * buffer,
 				     void (*routine)(void *), void * arg);
-
+  void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer * buffer,
+					   void (*routine)(void *), void * arg);
   void (*ptr__pthread_cleanup_pop) (struct _pthread_cleanup_buffer * buffer,
 				    int execute);
+  void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer * buffer,
+					    int execute);
 };
 
 /* Variable in libc.so.  */