From 84f0303fc0336779db71791b0ab20db733d8c60f Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Wed, 3 Jun 2015 07:24:50 -0600 Subject: [PATCH] mq_timedreceive() move the location where the errno value is set; the TIMEDOUT errno setting was being overwritten by subsequent actions before returning. Noted by Freddie Chopin. --- sched/mqueue/mq_timedreceive.c | 4 +++- sched/mqueue/mq_timedsend.c | 3 ++- sched/mqueue/mq_waitirq.c | 1 - 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/sched/mqueue/mq_timedreceive.c b/sched/mqueue/mq_timedreceive.c index 1d1c71aded5..eb1822f7e4f 100644 --- a/sched/mqueue/mq_timedreceive.c +++ b/sched/mqueue/mq_timedreceive.c @@ -258,11 +258,13 @@ ssize_t mq_timedreceive(mqd_t mqdes, FAR char *msg, size_t msglen, if (result != OK) { - set_errno(result); irqrestore(saved_state); sched_unlock(); + wd_delete(rtcb->waitdog); rtcb->waitdog = NULL; + + set_errno(result); return ERROR; } diff --git a/sched/mqueue/mq_timedsend.c b/sched/mqueue/mq_timedsend.c index 31855e6401f..929a5bc6104 100644 --- a/sched/mqueue/mq_timedsend.c +++ b/sched/mqueue/mq_timedsend.c @@ -351,7 +351,8 @@ errout_with_irqsave: errout_with_mqmsg: mq_msgfree(mqmsg); - set_errno(result); sched_unlock(); + + set_errno(result); return ERROR; } diff --git a/sched/mqueue/mq_waitirq.c b/sched/mqueue/mq_waitirq.c index 76d2e236d78..e22f67d2bb3 100644 --- a/sched/mqueue/mq_waitirq.c +++ b/sched/mqueue/mq_waitirq.c @@ -143,4 +143,3 @@ void mq_waitirq(FAR struct tcb_s *wtcb, int errcode) irqrestore(saved_state); } -