summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/canceleval.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2009-10-10 16:03:38 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2009-10-10 16:03:38 +0000
commit171bbec50871de9b60ae87c460bbfceebc26f769 (patch)
tree7bd0ac9e75dd10f9f1196f504dd603c3212ebf8b /cpukit/posix/src/canceleval.c
parent2009-10-10 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-171bbec50871de9b60ae87c460bbfceebc26f769.tar.bz2
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.
Diffstat (limited to 'cpukit/posix/src/canceleval.c')
-rw-r--r--cpukit/posix/src/canceleval.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/cpukit/posix/src/canceleval.c b/cpukit/posix/src/canceleval.c
index 784b91ffb6..3903ca1b1d 100644
--- a/cpukit/posix/src/canceleval.c
+++ b/cpukit/posix/src/canceleval.c
@@ -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();
+
}