diff --git a/sched/mqueue/mq_receive.c b/sched/mqueue/mq_receive.c index 231b4c5d4f4..474fc41e5b6 100644 --- a/sched/mqueue/mq_receive.c +++ b/sched/mqueue/mq_receive.c @@ -145,8 +145,6 @@ ssize_t file_mq_timedreceive_internal(FAR struct file *mq, FAR char *msg, irqstate_t flags; ssize_t ret = 0; - DEBUGASSERT(up_interrupt_context() == false); - /* Verify the input parameters */ if (abstime && (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)) @@ -190,6 +188,14 @@ ssize_t file_mq_timedreceive_internal(FAR struct file *mq, FAR char *msg, return -EAGAIN; } + /* If we are in interrupt context, return EAGAIN instead of blocking */ + + if (up_interrupt_context()) + { + leave_critical_section(flags); + return -EAGAIN; + } + /* Wait & get the message from the message queue */ ret = nxmq_wait_receive(msgq, &mqmsg, abstime, ticks);