You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/02/09 13:21:54 UTC
[incubator-nuttx] 01/05: Revert "pthread: Avoid recursive pthread_exit call"
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 6814b1416f225bb1c1aa6c07c186f19966c7dee7
Author: Huang Qi <hu...@xiaomi.com>
AuthorDate: Wed Jan 26 10:46:31 2022 +0800
Revert "pthread: Avoid recursive pthread_exit call"
This reverts commit a2941532bdacba9b8e69dfae4b365aff33f0503a.
Signed-off-by: Huang Qi <hu...@xiaomi.com>
---
sched/pthread/pthread_cancel.c | 3 ++-
sched/signal/sig_default.c | 3 ++-
sched/task/task_cancelpt.c | 6 ++++--
sched/task/task_setcancelstate.c | 3 ++-
sched/task/task_setcanceltype.c | 11 ++++++-----
5 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/sched/pthread/pthread_cancel.c b/sched/pthread/pthread_cancel.c
index 22d35f3..7b66b7c 100644
--- a/sched/pthread/pthread_cancel.c
+++ b/sched/pthread/pthread_cancel.c
@@ -85,9 +85,10 @@ int pthread_cancel(pthread_t thread)
if (tcb == this_task())
{
+#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
tcb->flags &= ~TCB_FLAG_CANCEL_PENDING;
tcb->flags |= TCB_FLAG_CANCEL_DOING;
-#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
+
up_pthread_exit(((FAR struct pthread_tcb_s *)tcb)->exit,
PTHREAD_CANCELED);
#else
diff --git a/sched/signal/sig_default.c b/sched/signal/sig_default.c
index e66ad81..4110ae4 100644
--- a/sched/signal/sig_default.c
+++ b/sched/signal/sig_default.c
@@ -217,9 +217,10 @@ static void nxsig_abnormal_termination(int signo)
* REVISIT: This will not work if HAVE_GROUP_MEMBERS is not set.
*/
+#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
rtcb->flags &= ~TCB_FLAG_CANCEL_PENDING;
rtcb->flags |= TCB_FLAG_CANCEL_DOING;
-#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
+
up_pthread_exit(((FAR struct pthread_tcb_s *)rtcb)->exit,
PTHREAD_CANCELED);
#else
diff --git a/sched/task/task_cancelpt.c b/sched/task/task_cancelpt.c
index c7c393f..4955ab0 100644
--- a/sched/task/task_cancelpt.c
+++ b/sched/task/task_cancelpt.c
@@ -141,9 +141,10 @@ bool enter_cancellation_point(void)
if ((tcb->flags & TCB_FLAG_TTYPE_MASK) ==
TCB_FLAG_TTYPE_PTHREAD)
{
+#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
tcb->flags &= ~TCB_FLAG_CANCEL_PENDING;
tcb->flags |= TCB_FLAG_CANCEL_DOING;
-#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
+
up_pthread_exit(((FAR struct pthread_tcb_s *)tcb)->exit,
PTHREAD_CANCELED);
#else
@@ -235,9 +236,10 @@ void leave_cancellation_point(void)
if ((tcb->flags & TCB_FLAG_TTYPE_MASK) ==
TCB_FLAG_TTYPE_PTHREAD)
{
+#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
tcb->flags &= ~TCB_FLAG_CANCEL_PENDING;
tcb->flags |= TCB_FLAG_CANCEL_DOING;
-#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
+
up_pthread_exit(((FAR struct pthread_tcb_s *)tcb)->exit,
PTHREAD_CANCELED);
#else
diff --git a/sched/task/task_setcancelstate.c b/sched/task/task_setcancelstate.c
index 63f3ef3..6b61632 100644
--- a/sched/task/task_setcancelstate.c
+++ b/sched/task/task_setcancelstate.c
@@ -112,9 +112,10 @@ int task_setcancelstate(int state, FAR int *oldstate)
if ((tcb->flags & TCB_FLAG_TTYPE_MASK) ==
TCB_FLAG_TTYPE_PTHREAD)
{
+#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
tcb->flags &= ~TCB_FLAG_CANCEL_PENDING;
tcb->flags |= TCB_FLAG_CANCEL_DOING;
-#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
+
up_pthread_exit(((FAR struct pthread_tcb_s *)tcb)->exit,
PTHREAD_CANCELED);
#else
diff --git a/sched/task/task_setcanceltype.c b/sched/task/task_setcanceltype.c
index f33aeb1..d57cc64 100644
--- a/sched/task/task_setcanceltype.c
+++ b/sched/task/task_setcanceltype.c
@@ -100,13 +100,14 @@ int task_setcanceltype(int type, FAR int *oldtype)
#ifndef CONFIG_DISABLE_PTHREAD
if ((tcb->flags & TCB_FLAG_TTYPE_MASK) == TCB_FLAG_TTYPE_PTHREAD)
{
- tcb->flags &= ~TCB_FLAG_CANCEL_PENDING;
- tcb->flags |= TCB_FLAG_CANCEL_DOING;
#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__)
- up_pthread_exit(((FAR struct pthread_tcb_s *)tcb)->exit,
- PTHREAD_CANCELED);
+ tcb->flags &= ~TCB_FLAG_CANCEL_PENDING;
+ tcb->flags |= TCB_FLAG_CANCEL_DOING;
+
+ up_pthread_exit(((FAR struct pthread_tcb_s *)tcb)->exit,
+ PTHREAD_CANCELED);
#else
- pthread_exit(PTHREAD_CANCELED);
+ pthread_exit(PTHREAD_CANCELED);
#endif
}
else