summaryrefslogtreecommitdiff
path: root/nuttx/sched/work_cancel.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-04 00:54:09 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-04 00:54:09 +0000
commitd8aa30d561322f24cf0eb67f27f41ad9ab52474e (patch)
tree7bfc2aaf9a03320f24991b54a67a1db24e05f100 /nuttx/sched/work_cancel.c
parented14f7102218c784f1f22649485de262f34a6507 (diff)
downloadpx4-nuttx-d8aa30d561322f24cf0eb67f27f41ad9ab52474e.tar.gz
px4-nuttx-d8aa30d561322f24cf0eb67f27f41ad9ab52474e.tar.bz2
px4-nuttx-d8aa30d561322f24cf0eb67f27f41ad9ab52474e.zip
Add support for multiple work queues
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5081 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/sched/work_cancel.c')
-rw-r--r--nuttx/sched/work_cancel.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/nuttx/sched/work_cancel.c b/nuttx/sched/work_cancel.c
index 30b650826..55df86f44 100644
--- a/nuttx/sched/work_cancel.c
+++ b/nuttx/sched/work_cancel.c
@@ -1,7 +1,7 @@
/****************************************************************************
* sched/work_cancel.c
*
- * Copyright (C) 2009-2010 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2009-2010, 2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -74,6 +74,7 @@
/****************************************************************************
* Public Functions
****************************************************************************/
+
/****************************************************************************
* Name: work_cancel
*
@@ -83,6 +84,7 @@
* again.
*
* Input parameters:
+ * qid - The work queue ID
* work - The previously queue work structure to cancel
*
* Returned Value:
@@ -90,11 +92,12 @@
*
****************************************************************************/
-int work_cancel(struct work_s *work)
+int work_cancel(int qid, FAR struct work_s *work)
{
+ FAR struct wqueue_s *wqueue = &g_work[qid];
irqstate_t flags;
- DEBUGASSERT(work != NULL);
+ DEBUGASSERT(work != NULL && (unsigned)qid < NWORKERS);
/* Cancelling the work is simply a matter of removing the work structure
* from the work queue. This must be done with interrupts disabled because
@@ -106,18 +109,19 @@ int work_cancel(struct work_s *work)
{
/* A little test of the integrity of the work queue */
- DEBUGASSERT(work->dq.flink ||(FAR dq_entry_t *)work == g_work.tail);
- DEBUGASSERT(work->dq.blink ||(FAR dq_entry_t *)work == g_work.head);
+ DEBUGASSERT(work->dq.flink ||(FAR dq_entry_t *)work == wqueue->q.tail);
+ DEBUGASSERT(work->dq.blink ||(FAR dq_entry_t *)work == wqueue->q.head);
/* Remove the entry from the work queue and make sure that it is
* mark as availalbe (i.e., the worker field is nullified).
*/
- dq_rem((FAR dq_entry_t *)work, &g_work);
+ dq_rem((FAR dq_entry_t *)work, &wqueue->q);
work->worker = NULL;
}
irqrestore(flags);
return OK;
}
+
#endif /* CONFIG_SCHED_WORKQUEUE */