Skip to content

Commit 316452c

Browse files
jerome-pouillercfriedt
authored andcommitted
portability: cmsis: Fix possible race in osEventFlagsClear()
The CMSIS-RTOS specification says "The function returns the event flags before clearing". In the original code, if another thread set an event between k_event_test() and k_event_clear(), there was a risk the function clear a flag without reporting it to the caller: T1 T2 k_event_test(..) == 0 ... ... k_event_post(.. 1) k_event_clear(.. 1) ... return 0 (while event 1 has been cleared) Signed-off-by: Jérôme Pouiller <[email protected]>
1 parent fd50016 commit 316452c

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

subsys/portability/cmsis_rtos_v2/event_flags.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ uint32_t osEventFlagsClear(osEventFlagsId_t ef_id, uint32_t flags)
7979
}
8080

8181
rv = k_event_test(&events->z_event, 0xFFFFFFFF);
82-
k_event_clear(&events->z_event, flags);
82+
k_event_clear(&events->z_event, flags & rv);
8383

8484
return rv;
8585
}

0 commit comments

Comments
 (0)