diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/thread/cancellation.c | 18 | ||||
| -rw-r--r-- | src/thread/cancellation2.c | 0 | ||||
| -rw-r--r-- | src/thread/i386/cancellation.s (renamed from src/thread/i386/cancellation2.s) | 16 | ||||
| -rw-r--r-- | src/thread/pthread_create.c | 13 | 
4 files changed, 30 insertions, 17 deletions
| diff --git a/src/thread/cancellation.c b/src/thread/cancellation.c index 6dfee539..b02cdfb0 100644 --- a/src/thread/cancellation.c +++ b/src/thread/cancellation.c @@ -1,18 +1,11 @@  #include "pthread_impl.h" -#ifdef __pthread_register_cancel -#undef __pthread_register_cancel -#undef __pthread_unregister_cancel -#undef __pthread_unwind_next -#define __pthread_register_cancel __pthread_register_cancel_3 -#define __pthread_unregister_cancel __pthread_unregister_cancel_3 -#define __pthread_unwind_next __pthread_unwind_next_3 -#endif -  static void dummy(struct __ptcb *cb)  {  }  weak_alias(dummy, __pthread_do_unwind); +weak_alias(dummy, __pthread_do_register); +weak_alias(dummy, __pthread_do_unregister);  void __pthread_unwind_next(struct __ptcb *cb)  { @@ -21,13 +14,10 @@ void __pthread_unwind_next(struct __ptcb *cb)  void __pthread_register_cancel(struct __ptcb *cb)  { -	struct pthread *self = pthread_self(); -	cb->__next = self->cancelbuf; -	self->cancelbuf = cb; +	__pthread_do_register(cb);  }  void __pthread_unregister_cancel(struct __ptcb *cb)  { -	struct pthread *self = __pthread_self(); -	self->cancelbuf = self->cancelbuf->__next; +	__pthread_do_unregister(cb);  } diff --git a/src/thread/cancellation2.c b/src/thread/cancellation2.c deleted file mode 100644 index e69de29b..00000000 --- a/src/thread/cancellation2.c +++ /dev/null diff --git a/src/thread/i386/cancellation2.s b/src/thread/i386/cancellation.s index beeffb91..75dc6091 100644 --- a/src/thread/i386/cancellation2.s +++ b/src/thread/i386/cancellation.s @@ -3,7 +3,7 @@  .type   __pthread_register_cancel,@function  __pthread_register_cancel:  	pushl %eax -	call __pthread_register_cancel_3 +	call __pthread_do_register  	popl %eax  	ret @@ -11,7 +11,7 @@ __pthread_register_cancel:  .type   __pthread_unregister_cancel,@function  __pthread_unregister_cancel:  	pushl %eax -	call __pthread_unregister_cancel_3 +	call __pthread_do_unregister  	popl %eax  	ret @@ -19,6 +19,16 @@ __pthread_unregister_cancel:  .type   __pthread_unwind_next,@function  __pthread_unwind_next:  	pushl %eax -	call __pthread_unwind_next_3 +	call __pthread_do_unwind  	popl %eax +__pthread_do_unwind: +__pthread_do_register: +__pthread_do_unregister:  	ret + +.weak __pthread_do_unwind +.weak __pthread_do_register +.weak __pthread_do_unregister +.type __pthread_do_unwind,@function +.type __pthread_do_register,@function +.type __pthread_do_unregister,@function diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index 0e955911..7be58b99 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -39,6 +39,19 @@ void __pthread_do_unwind(struct __ptcb *cb)  	__syscall(SYS_exit, 0);  } +void __pthread_do_register(struct __ptcb *cb) +{ +	struct pthread *self = pthread_self(); +	cb->__next = self->cancelbuf; +	self->cancelbuf = cb; +} + +void __pthread_do_unregister(struct __ptcb *cb) +{ +	struct pthread *self = __pthread_self(); +	self->cancelbuf = self->cancelbuf->__next; +} +  static int start(void *p)  {  	struct pthread *self = p; | 
