diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-03-12 14:38:46 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-03-13 11:27:11 +0100 |
commit | eae664ea8fdae9e514dc7970c6cf21a0b9767ddd (patch) | |
tree | 7c4c2ec603cde7c2dcc9bc2f6abaae2a8e4c34fd /rtemsbsd/rtems/rtems-kernel-muteximpl.c | |
parent | dwc_otg: Default to USB host mode (diff) | |
download | rtems-libbsd-eae664ea8fdae9e514dc7970c6cf21a0b9767ddd.tar.bz2 |
mutex: Use panic() after ISR lock release
Using panic() with interrupts disabled could lead to an additional error
(INTERNAL_ERROR_BAD_THREAD_DISPATCH_ENVIRONMENT) due to a potentially
blocking output.
Diffstat (limited to 'rtemsbsd/rtems/rtems-kernel-muteximpl.c')
-rw-r--r-- | rtemsbsd/rtems/rtems-kernel-muteximpl.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/rtemsbsd/rtems/rtems-kernel-muteximpl.c b/rtemsbsd/rtems/rtems-kernel-muteximpl.c index d2400282..8a832b4e 100644 --- a/rtemsbsd/rtems/rtems-kernel-muteximpl.c +++ b/rtemsbsd/rtems/rtems-kernel-muteximpl.c @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -48,9 +48,13 @@ rtems_bsd_mutex_lock_more(struct lock_object *lock, rtems_bsd_mutex *m, Thread_queue_Context *queue_context) { if (owner == executing) { - BSD_ASSERT(lock->lo_flags & LO_RECURSABLE); - ++m->nest_level; + if ((lock->lo_flags & LO_RECURSABLE) == 0) { + _Thread_queue_Release(&m->queue, queue_context); + panic("mutex lock: %s: not LO_RECURSABLE\n", + m->queue.Queue.name); + } + ++m->nest_level; _Thread_queue_Release(&m->queue, queue_context); } else { _Thread_queue_Context_set_thread_state(queue_context, |