aboutsummaryrefslogtreecommitdiffstats
path: root/os/rt/src/chmboxes.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/rt/src/chmboxes.c')
-rw-r--r--os/rt/src/chmboxes.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/os/rt/src/chmboxes.c b/os/rt/src/chmboxes.c
index 31a5e5970..b7ae4f7d1 100644
--- a/os/rt/src/chmboxes.c
+++ b/os/rt/src/chmboxes.c
@@ -105,14 +105,29 @@ void chMBObjectInit(mailbox_t *mbp, msg_t *buf, cnt_t n) {
*/
void chMBReset(mailbox_t *mbp) {
+ chSysLock();
+ chMBResetI(mbp);
+ chSchRescheduleS();
+ chSysUnlock();
+}
+
+/**
+ * @brief Resets a @p mailbox_t object.
+ * @details All the waiting threads are resumed with status @p MSG_RESET and
+ * the queued messages are lost.
+ *
+ * @param[in] mbp the pointer to an initialized @p mailbox_t object
+ *
+ * @api
+ */
+void chMBResetI(mailbox_t *mbp) {
+
+ chDbgCheckClassI();
chDbgCheck(mbp != NULL);
- chSysLock();
mbp->mb_wrptr = mbp->mb_rdptr = mbp->mb_buffer;
chSemResetI(&mbp->mb_emptysem, mbp->mb_top - mbp->mb_buffer);
chSemResetI(&mbp->mb_fullsem, 0);
- chSchRescheduleS();
- chSysUnlock();
}
/**