2009-10-10 Joel Sherrill <joel.sherrill@oarcorp.com>

* posix/include/rtems/posix/threadsup.h, posix/src/cancel.c,
	posix/src/canceleval.c: Make psxcancel run again.
	_POSIX_Thread_Exit() can be called on running thread or another
	thread when it is cancelled.
This commit is contained in:
Joel Sherrill
2009-10-10 16:03:38 +00:00
parent 6805ac3718
commit 171bbec508
4 changed files with 14 additions and 9 deletions

View File

@@ -1,3 +1,10 @@
2009-10-10 Joel Sherrill <joel.sherrill@oarcorp.com>
* posix/include/rtems/posix/threadsup.h, posix/src/cancel.c,
posix/src/canceleval.c: Make psxcancel run again.
_POSIX_Thread_Exit() can be called on running thread or another
thread when it is cancelled.
2009-10-10 Joel Sherrill <joel.sherrill@oarcorp.com>
* posix/src/mqueuetimedreceive.c, posix/src/mqueuetimedsend.c,

View File

@@ -81,7 +81,7 @@ typedef struct {
void _POSIX_Thread_Exit(
Thread_Control *the_thread,
void *value_ptr
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
);
#endif
/* end of include file */

View File

@@ -52,6 +52,7 @@ int pthread_cancel(
thread_support->cancelation_requested = 1;
/* This enables dispatch implicitly */
_POSIX_Thread_Evaluate_cancellation_and_enable_dispatch( the_thread );
return 0;

View File

@@ -24,18 +24,15 @@ void _POSIX_Thread_Evaluate_cancellation_and_enable_dispatch(
)
{
POSIX_API_Control *thread_support;
bool cancel;
cancel = false;
thread_support = the_thread->API_Extensions[ THREAD_API_POSIX ];
if ( thread_support->cancelability_state == PTHREAD_CANCEL_ENABLE &&
thread_support->cancelability_type == PTHREAD_CANCEL_ASYNCHRONOUS &&
thread_support->cancelation_requested )
cancel = true;
_Thread_Enable_dispatch();
if ( cancel )
thread_support->cancelation_requested ) {
_Thread_Unnest_dispatch();
_POSIX_Thread_Exit( the_thread, PTHREAD_CANCELED );
} else
_Thread_Enable_dispatch();
}