Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/newlib
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2013-11-30 03:35:34 +0400
committerJoel Sherrill <joel.sherrill@oarcorp.com>2013-11-30 03:35:34 +0400
commita534dfd26e765047621acd0eda656ded886e7108 (patch)
tree3f4d9db657af8cf61f3db8a0b66dc421ef0239d2 /newlib
parent62c28b76acd5190377c9311e5ef5009f9df175c5 (diff)
2013-11-29 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libc/include/pthread.h (pthread_cleanup_push): Delete prototype and add macro of the same name. (pthread_cleanup_pop): Likewise. (_pthread_cleanup_context): Define. (_pthread_cleanup_push): Likewise. (_pthread_cleanup_pop): Likewise. (pthread_cleanup_push_defer_np): Define if _GNU_SOURCE is defined. (pthread_cleanup_pop_restore_np): Likewise. (_pthread_cleanup_push_defer): Likewise. (_pthread_cleanup_pop_restore): Likewise.
Diffstat (limited to 'newlib')
-rw-r--r--newlib/ChangeLog13
-rw-r--r--newlib/libc/include/pthread.h47
2 files changed, 57 insertions, 3 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 850b93acc..60392b8f6 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,16 @@
+2013-11-29 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * libc/include/pthread.h (pthread_cleanup_push): Delete prototype
+ and add macro of the same name.
+ (pthread_cleanup_pop): Likewise.
+ (_pthread_cleanup_context): Define.
+ (_pthread_cleanup_push): Likewise.
+ (_pthread_cleanup_pop): Likewise.
+ (pthread_cleanup_push_defer_np): Define if _GNU_SOURCE is defined.
+ (pthread_cleanup_pop_restore_np): Likewise.
+ (_pthread_cleanup_push_defer): Likewise.
+ (_pthread_cleanup_pop_restore): Likewise.
+
2013-11-29 Jennifer Averett <jennifer.averett@oarcorp.com>
* libc/include/pthread.h (pthread_attr_setaffinity_np):
diff --git a/newlib/libc/include/pthread.h b/newlib/libc/include/pthread.h
index 935de4119..db1f9c1ca 100644
--- a/newlib/libc/include/pthread.h
+++ b/newlib/libc/include/pthread.h
@@ -34,6 +34,13 @@ extern "C" {
#include <sys/sched.h>
#include <sys/cdefs.h>
+struct _pthread_cleanup_context {
+ void (*_routine)(void *);
+ void *_arg;
+ int _canceltype;
+ struct _pthread_cleanup_context *_previous;
+};
+
/* Register Fork Handlers */
int _EXFUN(pthread_atfork,(void (*prepare)(void), void (*parent)(void),
void (*child)(void)));
@@ -304,9 +311,43 @@ void _EXFUN(pthread_testcancel, (void));
/* Establishing Cancellation Handlers, P1003.1c/Draft 10, p. 184 */
-void _EXFUN(pthread_cleanup_push,
- (void (*__routine)( void * ), void *__arg));
-void _EXFUN(pthread_cleanup_pop, (int __execute));
+void _EXFUN(_pthread_cleanup_push,
+ (struct _pthread_cleanup_context *_context,
+ void (*_routine)(void *), void *_arg));
+
+void _EXFUN(_pthread_cleanup_pop,
+ (struct _pthread_cleanup_context *_context,
+ int _execute));
+
+/* It is intentional to open and close the scope in two different macros */
+#define pthread_cleanup_push(_routine, _arg) \
+ do { \
+ struct _pthread_cleanup_context _pthread_clup_ctx; \
+ _pthread_cleanup_push(&_pthread_clup_ctx, (_routine), (_arg))
+
+#define pthread_cleanup_pop(_execute) \
+ _pthread_cleanup_pop(&_pthread_clup_ctx, (_execute)); \
+ } while (0)
+
+#if defined(_GNU_SOURCE)
+void _EXFUN(_pthread_cleanup_push_defer,
+ (struct _pthread_cleanup_context *_context,
+ void (*_routine)(void *), void *_arg));
+
+void _EXFUN(_pthread_cleanup_pop_restore,
+ (struct _pthread_cleanup_context *_context,
+ int _execute));
+
+/* It is intentional to open and close the scope in two different macros */
+#define pthread_cleanup_push_defer_np(_routine, _arg) \
+ do { \
+ struct _pthread_cleanup_context _pthread_clup_ctx; \
+ _pthread_cleanup_push_defer(&_pthread_clup_ctx, (_routine), (_arg))
+
+#define pthread_cleanup_pop_restore_np(_execute) \
+ _pthread_cleanup_pop_restore(&_pthread_clup_ctx, (_execute)); \
+ } while (0)
+#endif /* defined(_GNU_SOURCE) */
#if defined(_POSIX_THREAD_CPUTIME)