zephyr/kernel
Peter Bigot 656c09589a kernel: work: fix race condition with cancel before work runs
The original state management solution involved separate locks for a
work queue and each work item.  To avoid inter-lock dependencies a
window was left between the point where the work item was removed from
the queue (protected by queue lock) and the point where the work item
state was updated to mark the work item running.

This introduced a bug: If a cancellation was issued during this window
it would succeed, and the work item would appear to be idle even
though in fact the work queue thread was about to run it.

Since there is now only one lock, move the work item state updates
into the mutex regions associated with dequeuing the work item and
clearing the work queue busy flag.

Note that removing the window between queue and work mutex regions
eliminates the potential of having a dequeued work item be cancelled
before its QUEUED flag is cleared, simplifying the work item state
update.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
2021-05-18 15:02:08 +02:00
..
include kernel/swap: Add assertion to catch lock-breaking context switches 2021-05-17 15:27:37 -04:00
paging kernel: enable using timing subsys to collect paging histograms 2021-04-06 16:43:55 -04:00
atomic_c.c kernel: atomic: consistently use named type for atomic pointer values 2021-04-19 15:22:13 +02:00
banner.c kernel: init: move banner handling 2020-11-27 20:08:14 -05:00
cache_handlers.c cache: Rename sys_{dcache,icache}_* to sys_{data,instr}_cache_* 2021-05-08 07:00:33 +02:00
CMakeLists.txt cache: Introduce external cache controller system support 2021-05-08 07:00:33 +02:00
compiler_stack_protect.c tests: coverage: exclude the CODE UNREACHABLE of code coverage 2021-01-15 12:42:00 -05:00
condvar.c Tracing: Conditional variable tracing 2021-05-07 22:10:21 -04:00
device.c power: device_pm: Use spin lock instead of semaphore 2021-05-07 16:55:31 -04:00
errno.c kernel: support using thread local storage for errno 2020-10-24 10:52:00 -07:00
fatal.c kernel: fatal: Avoid thread api access when no multithreading 2021-04-29 14:50:35 +02:00
futex.c kernel: Fix 10.4 violations 2021-04-10 09:59:37 -04:00
idle.c kernel: replace power/power.h with pm/pm.h 2021-05-05 18:35:49 -04:00
init.c kernel: init.c: tag source for boot/pinned sections 2021-05-10 16:00:43 -05:00
Kconfig ztest: set thread name to test name 2021-05-17 18:45:57 -04:00
kheap.c Tracing: Memory Heap tracing 2021-05-07 22:10:21 -04:00
mailbox.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
mem_domain.c kernel: Make both operands of operators of same essential type category 2021-04-01 05:34:17 -04:00
mem_slab.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
mempool.c Tracing: Memory Heap tracing 2021-05-07 22:10:21 -04:00
mmu.c kernel: mmu: remove un-needed call to virt_to_bitmap_offset 2021-05-13 09:00:54 -05:00
msg_q.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
mutex.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
pipes.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
poll.c Tracing: Poll API and Work Poll tracing 2021-05-07 22:10:21 -04:00
queue.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
sched.c Tracing: Thread tracing 2021-05-07 22:10:21 -04:00
sem.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
smp.c smp: move a preprocessor conditional from .c to cmake 2021-05-03 17:13:01 -04:00
stack.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
system_work_q.c kernel: remove old work queue implementation 2021-03-03 20:06:00 -05:00
thread.c Tracing: Thread tracing 2021-05-07 22:10:21 -04:00
timeout.c Tracing: Thread tracing 2021-05-07 22:10:21 -04:00
timer.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
userspace.c coding guidelines rule 14_3_j: add explicit case check 2021-05-18 08:36:57 -04:00
userspace_handler.c userspace: update k_object API to support immutable objects 2020-09-02 13:48:13 +02:00
version.c zephyr: replace zephyr integer types with C99 types 2020-06-08 08:23:57 -05:00
work.c kernel: work: fix race condition with cancel before work runs 2021-05-18 15:02:08 +02:00
xip.c linker: arm: Add cortex_m itcm section 2021-01-15 14:51:20 +01:00