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.
This commit is contained in:
		| @@ -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): | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
|   | ||||
		Reference in New Issue
	
	Block a user