Skip to content

Commit 4c49427

Browse files
Fix auto_init_recursive_mutex definition for C++ (#875)
Co-authored-by: Graham Sanderson <graham.sanderson@gmail.com>
1 parent 33818dd commit 4c49427

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/common/pico_sync/include/pico/mutex.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ static inline bool recursive_mutex_is_initialized(recursive_mutex_t *mtx) {
289289
*
290290
* But the initialization of the mutex is performed automatically during runtime initialization
291291
*/
292-
#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 */ }
292+
#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 }
293293

294294
#ifdef __cplusplus
295295
}

test/kitchen_sink/kitchen_sink.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ __force_inline int something_inlined(int x) {
110110
return x * 2;
111111
}
112112

113+
auto_init_mutex(mutex);
114+
auto_init_recursive_mutex(recursive_mutex);
115+
113116
int main(void) {
114117
spiggle();
115118

@@ -118,6 +121,12 @@ int main(void) {
118121
printf("HI %d\n", something_inlined((int)time_us_32()));
119122
puts("Hello Everything!");
120123
puts("Hello Everything2!");
124+
125+
hard_assert(mutex_try_enter(&mutex, NULL));
126+
hard_assert(!mutex_try_enter(&mutex, NULL));
127+
hard_assert(recursive_mutex_try_enter(&recursive_mutex, NULL));
128+
hard_assert(recursive_mutex_try_enter(&recursive_mutex, NULL));
121129
// this should compile as we are Cortex M0+
122130
__asm volatile("SVC #3");
131+
123132
}

0 commit comments

Comments
 (0)