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 2024/09/16 18:56:47 UTC

(nuttx) 02/04: wqueue: extend the work_cancel_sync() return value

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/nuttx.git

commit 42b6dd0ff1f0eed3c67541a27f90be12e6d84c43
Author: ligd <li...@xiaomi.com>
AuthorDate: Tue Sep 10 23:46:19 2024 +0800

    wqueue: extend the work_cancel_sync() return value
    
    Return 1 to indicate the work was not cancelled.
    Because it is currently being processed by work thread,
    but wait for it to finish.
    
    Signed-off-by: ligd <li...@xiaomi.com>
---
 include/nuttx/wqueue.h      |  6 ++++--
 sched/wqueue/kwork_cancel.c | 31 +++++--------------------------
 2 files changed, 9 insertions(+), 28 deletions(-)

diff --git a/include/nuttx/wqueue.h b/include/nuttx/wqueue.h
index 58162ab88f..a38125446a 100644
--- a/include/nuttx/wqueue.h
+++ b/include/nuttx/wqueue.h
@@ -470,8 +470,10 @@ int work_cancel_wq(FAR struct kwork_wqueue_s *wqueue,
  *   work   - The previously queued work structure to cancel
  *
  * Returned Value:
- *   Zero (OK) on success, a negated errno on failure.  This error may be
- *   reported:
+ *   Zero means the work was successfully cancelled.
+ *   One means the work was not cancelled because it is currently being
+ *   processed by work thread, but wait for it to finish.
+ *   A negated errno value is returned on any failure:
  *
  *   -ENOENT - There is no such work queued.
  *   -EINVAL - An invalid work queue was specified
diff --git a/sched/wqueue/kwork_cancel.c b/sched/wqueue/kwork_cancel.c
index 0a91b3dba5..12186b33b1 100644
--- a/sched/wqueue/kwork_cancel.c
+++ b/sched/wqueue/kwork_cancel.c
@@ -42,29 +42,6 @@
  * Private Functions
  ****************************************************************************/
 
-/****************************************************************************
- * Name: work_qcancel
- *
- * Description:
- *   Cancel previously queued work.  This removes work from the work queue.
- *   After work has been cancelled, it may be requeued by calling
- *   work_queue() again.
- *
- * Input Parameters:
- *   wqueue  - The work queue to use
- *   sync    - true: synchronous cancel
- *             false: asynchronous cancel
- *   work    - The previously queued work structure to cancel
- *
- * Returned Value:
- *   Zero (OK) on success, a negated errno on failure.  This error may be
- *   reported:
- *
- *   -ENOENT - There is no such work queued.
- *   -EINVAL - An invalid work queue was specified
- *
- ****************************************************************************/
-
 static int work_qcancel(FAR struct kwork_wqueue_s *wqueue, bool sync,
                         FAR struct work_s *work)
 {
@@ -110,7 +87,7 @@ static int work_qcancel(FAR struct kwork_wqueue_s *wqueue, bool sync,
               wqueue->worker[wndx].pid != nxsched_gettid())
             {
               nxsem_wait_uninterruptible(&wqueue->worker[wndx].wait);
-              ret = OK;
+              ret = 1;
               break;
             }
         }
@@ -170,8 +147,10 @@ int work_cancel_wq(FAR struct kwork_wqueue_s *wqueue,
  *   work   - The previously queued work structure to cancel
  *
  * Returned Value:
- *   Zero (OK) on success, a negated errno on failure.  This error may be
- *   reported:
+ *   Zero means the work was successfully cancelled.
+ *   One means the work was not cancelled because it is currently being
+ *   processed by work thread, but wait for it to finish.
+ *   A negated errno value is returned on any failure:
  *
  *   -ENOENT - There is no such work queued.
  *   -EINVAL - An invalid work queue was specified