pw_async: Run aborted Tasks with cancelled Status

Add a pw::Status parameter to TaskFunction and adopt the
"hybrid" cancellation strategy: specify that when a Dispatcher
knows that a Task will not be running as scheduled, the
Dispatcher will still call its TaskFunction with a Status
parameter of PW_STATUS_CANCELLED to facilitate the
reclamation of Task resources by clients.

Change-Id: I00dbd4c1e52f745b82ee47e057fd6f8746c6b850
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133154
Reviewed-by: Ben Lawson <benlawson@google.com>
Commit-Queue: Ali Saeed <saeedali@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
12 files changed
tree: 290c8bb395192b0887658fbcfbfe62614cd7b608
  1. .allstar/
  2. .vscode/
  3. build_overrides/
  4. docker/
  5. docs/
  6. pw_alignment/
  7. pw_allocator/
  8. pw_analog/
  9. pw_android_toolchain/
  10. pw_arduino_build/
  11. pw_assert/
  12. pw_assert_basic/
  13. pw_assert_log/
  14. pw_assert_tokenized/
  15. pw_assert_zephyr/
  16. pw_async/
  17. pw_async_basic/
  18. pw_base64/
  19. pw_bloat/
  20. pw_blob_store/
  21. pw_bluetooth/
  22. pw_bluetooth_hci/
  23. pw_bluetooth_profiles/
  24. pw_boot/
  25. pw_boot_cortex_m/
  26. pw_build/
  27. pw_build_info/
  28. pw_build_mcuxpresso/
  29. pw_bytes/
  30. pw_checksum/
  31. pw_chrono/
  32. pw_chrono_embos/
  33. pw_chrono_freertos/
  34. pw_chrono_stl/
  35. pw_chrono_threadx/
  36. pw_chrono_zephyr/
  37. pw_cli/
  38. pw_compilation_testing/
  39. pw_console/
  40. pw_containers/
  41. pw_cpu_exception/
  42. pw_cpu_exception_cortex_m/
  43. pw_crypto/
  44. pw_digital_io/
  45. pw_docgen/
  46. pw_doctor/
  47. pw_env_setup/
  48. pw_file/
  49. pw_function/
  50. pw_fuzzer/
  51. pw_hdlc/
  52. pw_hex_dump/
  53. pw_i2c/
  54. pw_i2c_mcuxpresso/
  55. pw_ide/
  56. pw_interrupt/
  57. pw_interrupt_cortex_m/
  58. pw_interrupt_zephyr/
  59. pw_intrusive_ptr/
  60. pw_kvs/
  61. pw_libc/
  62. pw_log/
  63. pw_log_android/
  64. pw_log_basic/
  65. pw_log_null/
  66. pw_log_rpc/
  67. pw_log_string/
  68. pw_log_tokenized/
  69. pw_log_zephyr/
  70. pw_malloc/
  71. pw_malloc_freelist/
  72. pw_metric/
  73. pw_minimal_cpp_stdlib/
  74. pw_module/
  75. pw_multisink/
  76. pw_package/
  77. pw_perf_test/
  78. pw_persistent_ram/
  79. pw_polyfill/
  80. pw_preprocessor/
  81. pw_presubmit/
  82. pw_protobuf/
  83. pw_protobuf_compiler/
  84. pw_random/
  85. pw_result/
  86. pw_ring_buffer/
  87. pw_router/
  88. pw_rpc/
  89. pw_rust/
  90. pw_snapshot/
  91. pw_software_update/
  92. pw_span/
  93. pw_spi/
  94. pw_status/
  95. pw_stm32cube_build/
  96. pw_stream/
  97. pw_string/
  98. pw_symbolizer/
  99. pw_sync/
  100. pw_sync_baremetal/
  101. pw_sync_embos/
  102. pw_sync_freertos/
  103. pw_sync_stl/
  104. pw_sync_threadx/
  105. pw_sync_zephyr/
  106. pw_sys_io/
  107. pw_sys_io_arduino/
  108. pw_sys_io_baremetal_lm3s6965evb/
  109. pw_sys_io_baremetal_stm32f429/
  110. pw_sys_io_emcraft_sf2/
  111. pw_sys_io_mcuxpresso/
  112. pw_sys_io_pico/
  113. pw_sys_io_stdio/
  114. pw_sys_io_stm32cube/
  115. pw_sys_io_zephyr/
  116. pw_system/
  117. pw_target_runner/
  118. pw_thread/
  119. pw_thread_embos/
  120. pw_thread_freertos/
  121. pw_thread_stl/
  122. pw_thread_threadx/
  123. pw_thread_zephyr/
  124. pw_tls_client/
  125. pw_tls_client_boringssl/
  126. pw_tls_client_mbedtls/
  127. pw_tokenizer/
  128. pw_tool/
  129. pw_toolchain/
  130. pw_trace/
  131. pw_trace_tokenized/
  132. pw_transfer/
  133. pw_unit_test/
  134. pw_varint/
  135. pw_watch/
  136. pw_web/
  137. pw_work_queue/
  138. seed/
  139. targets/
  140. third_party/
  141. ts/
  142. zephyr/
  143. .bazelignore
  144. .bazelrc
  145. .black.toml
  146. .clang-format
  147. .clang-tidy
  148. .eslintrc.json
  149. .git-blame-ignore-revs
  150. .gitattributes
  151. .gitignore
  152. .gn
  153. .mypy.ini
  154. .prettierrc.js
  155. .pw_ide.yaml
  156. .pylintrc
  157. activate.bat
  158. Android.bp
  159. AUTHORS
  160. bootstrap.bat
  161. bootstrap.sh
  162. BUILD.bazel
  163. BUILD.gn
  164. BUILDCONFIG.gn
  165. CMakeLists.txt
  166. jest.config.ts
  167. Kconfig.zephyr
  168. LICENSE
  169. modules.gni
  170. OWNERS
  171. package-lock.json
  172. package.json
  173. pigweed.json
  174. PIGWEED_MODULES
  175. PW_PLUGINS
  176. README.md
  177. rollup.config.js
  178. tsconfig.json
  179. WORKSPACE
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/.

Links