From 5b568f224750dadbcae08f0fdd10c085e0676701 Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Mon, 20 Jun 2022 09:41:14 -0700 Subject: [PATCH 1/3] Fix auto_init_recursive_mutex definition for C++ Fixes #874 --- src/common/pico_sync/include/pico/mutex.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/pico_sync/include/pico/mutex.h b/src/common/pico_sync/include/pico/mutex.h index e834dc513..ca9376020 100644 --- a/src/common/pico_sync/include/pico/mutex.h +++ b/src/common/pico_sync/include/pico/mutex.h @@ -289,7 +289,7 @@ static inline bool recursive_mutex_is_initialized(recursive_mutex_t *mtx) { * * But the initialization of the mutex is performed automatically during runtime initialization */ -#define auto_init_recursive_mutex(name) static __attribute__((section(".mutex_array"))) recursive_mutex_t name = { .core.spin_lock = (spin_lock_t *)1 /* marker for runtime_init */ } +#define auto_init_recursive_mutex(name) static __attribute__((section(".mutex_array"))) recursive_mutex_t name = { .core = { .spin_lock = (spin_lock_t *)1 /* marker for runtime_init */ }, .owner = 0, .enter_count = 0 } #ifdef __cplusplus } From 491ab1fb7c535d00396976732a126cbc26006893 Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Mon, 20 Jun 2022 10:25:40 -0700 Subject: [PATCH 2/3] Add tests from #876 --- test/kitchen_sink/kitchen_sink.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/kitchen_sink/kitchen_sink.c b/test/kitchen_sink/kitchen_sink.c index f61ece363..e007ce9a8 100644 --- a/test/kitchen_sink/kitchen_sink.c +++ b/test/kitchen_sink/kitchen_sink.c @@ -110,6 +110,9 @@ __force_inline int something_inlined(int x) { return x * 2; } +auto_init_mutex(mutex); +auto_init_recursive_mutex(recursive_mutex); + int main(void) { spiggle(); @@ -118,6 +121,12 @@ int main(void) { printf("HI %d\n", something_inlined((int)time_us_32())); puts("Hello Everything!"); puts("Hello Everything2!"); + + assert(mutex_try_enter(&mutex, NULL)); + assert(!mutex_try_enter(&mutex, NULL)); + assert(recursive_mutex_try_enter(&recursive_mutex, NULL)); + assert(recursive_mutex_try_enter(&recursive_mutex, NULL)); // this should compile as we are Cortex M0+ __asm volatile("SVC #3"); + } From 6af733c9938b9cb82a2057e3a8c1de9c000eca16 Mon Sep 17 00:00:00 2001 From: Graham Sanderson Date: Mon, 20 Jun 2022 12:44:06 -0500 Subject: [PATCH 3/3] fix kitchen_sink release build --- test/kitchen_sink/kitchen_sink.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/kitchen_sink/kitchen_sink.c b/test/kitchen_sink/kitchen_sink.c index e007ce9a8..62fe03a07 100644 --- a/test/kitchen_sink/kitchen_sink.c +++ b/test/kitchen_sink/kitchen_sink.c @@ -122,10 +122,10 @@ int main(void) { puts("Hello Everything!"); puts("Hello Everything2!"); - assert(mutex_try_enter(&mutex, NULL)); - assert(!mutex_try_enter(&mutex, NULL)); - assert(recursive_mutex_try_enter(&recursive_mutex, NULL)); - assert(recursive_mutex_try_enter(&recursive_mutex, NULL)); + hard_assert(mutex_try_enter(&mutex, NULL)); + hard_assert(!mutex_try_enter(&mutex, NULL)); + hard_assert(recursive_mutex_try_enter(&recursive_mutex, NULL)); + hard_assert(recursive_mutex_try_enter(&recursive_mutex, NULL)); // this should compile as we are Cortex M0+ __asm volatile("SVC #3");