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