mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
9142d9c375
19383: cord: include gcoap_req_send returning 0 in error r=benpicco a=bergzand ### Contribution description gcoap_req_send returns 0 if it was unable to send the CoAP request. CoRD did not include that case in the return code checks. This changes CoRD to include it and drop the registration if CoAP could not send the request. The old behaviour made the CoRD thread lock up. ### Testing procedure - Check with the gcoap API docs. - I can reliable trigger the issue with a RIOT application including both the `cord_ep_standalone` module and some measurement reported both sending requests to the same application. If at some point the application is shut down, gcoap has all its memo's occupied with the measurement reporting and can't add the CoRD update request. Thus the CoRD update request fails with a zero code and the thread (previously) would lock up. ### Issues/PRs references None 19385: cpu/stm32/periph/timer: fix clobered IRQ flag r=benpicco a=Enoch247 ### Contribution description From the git commit: > The STM32 periph_timer driver reads the timer's status flags, then clears them all. It is possible that a timer interrupt could occur between reading the flag and clearing it. This would lead to a lost interrupt. > > The timer's status flags can be cleared by software, but can only be set by the hardware. This patch takes advantage of this by only clearing the flags it knows are set. The rest of the flags are set, which doesn't actually change their state. I had trouble finding anything in ST's datasheet saying that software could not set the timer's status flags, but testing showed that this is how it works in practice. Further, [ST's own HAL ](https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h#L1258)confirms this. If the hardware didn't work this way, it would be impossible to atomically read-modify-write the flags. ### Testing procedure I tested by doing the following: 1. `make -C tests/periph_timer BOARD=nucleo-f767zi all flash term` 2. press s 3. press [ENTER] 4. observe test passes 5. `make -C tests/periph_timer_periodic BOARD=nucleo-f767zi all flash term` 6. press s 7. press [ENTER] 8. observe test passes 9. `make -C tests/periph_timer_short_relative_set BOARD=nucleo-f767zi all flash term` 10. press s 11. press [ENTER] 12. observe test passes ### Issues/PRs references - none known Co-authored-by: Koen Zandberg <koen@bergzand.net> Co-authored-by: Joshua DeWeese <jdeweese@primecontrols.com> |
||
---|---|---|
.. | ||
analog_util | ||
app_metadata | ||
arduino | ||
auto_init | ||
base64 | ||
benchmark | ||
bhp | ||
bitfield | ||
bloom | ||
bus | ||
can | ||
cb_mux | ||
checksum | ||
chunked_ringbuffer | ||
clif | ||
coding | ||
color | ||
congure | ||
cpp11-compat | ||
cpp_new_delete | ||
crypto | ||
cxx_ctor_guards | ||
debug_irq_disable | ||
div | ||
ecc | ||
eepreg | ||
embunit | ||
entropy_source | ||
event | ||
evtimer | ||
fido2 | ||
fmt | ||
frac | ||
fs | ||
fuzzing | ||
hashes | ||
include | ||
iolist | ||
isrpipe | ||
libc | ||
log_color | ||
log_printfnoformat | ||
luid | ||
malloc_thread_safe | ||
matstat | ||
memarray | ||
mineplex | ||
net | ||
newlib_syscalls_default | ||
od | ||
oneway-malloc | ||
phydat | ||
picolibc_syscalls_default | ||
pipe | ||
pm_layered | ||
posix | ||
preprocessor | ||
progress_bar | ||
ps | ||
puf_sram | ||
random | ||
riotboot | ||
rtc_utils | ||
rust_riotmodules | ||
rust_riotmodules_standalone | ||
saul_reg | ||
sched_round_robin | ||
schedstatistics | ||
sema | ||
sema_inv | ||
senml | ||
seq | ||
shell | ||
shell_lock | ||
ssp | ||
stdio_nimble | ||
stdio_null | ||
stdio_rtt | ||
stdio_semihosting | ||
stdio_uart | ||
stdio_udp | ||
suit | ||
test_utils | ||
timex | ||
tiny_strerror | ||
trace | ||
trickle | ||
tsrb | ||
universal_address | ||
uri_parser | ||
usb | ||
usb_board_reset | ||
ut_process | ||
uuid | ||
vfs | ||
vfs_util | ||
xtimer | ||
zptr | ||
ztimer | ||
ztimer64 | ||
doc.txt | ||
Kconfig | ||
Kconfig.newlib | ||
Kconfig.picolibc | ||
Kconfig.stdio | ||
Makefile | ||
Makefile.dep | ||
Makefile.include |