From b9fa3e167eb1b7dfc658b6016e43fcd4e806031b Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sat, 11 Nov 2017 18:01:28 -0600 Subject: [PATCH] Changes from review of clock_nanosleep(): Misplaced right bracket, but return value in one failure case. --- sched/signal/sig_nanosleep.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sched/signal/sig_nanosleep.c b/sched/signal/sig_nanosleep.c index 86c731d235d..d248027bc2e 100644 --- a/sched/signal/sig_nanosleep.c +++ b/sched/signal/sig_nanosleep.c @@ -296,13 +296,19 @@ int clock_nanosleep(clockid_t clockid, int flags, irqstate = enter_critical_section(); ret = clock_gettime(clockid, &now); - if (ret >= 0) + if (ret < 0) { - clock_timespec_subtract(rqtp, &now, &reltime); + /* clock_gettime() sets the errno variable */ + + leave_critical_section(irqstate); + leave_cancellation_point(); + return ERROR; } - /* Now that we have the relative time, the remaining operations are - * equivalent to nxsig_nanosleep(). + clock_timespec_subtract(rqtp, &now, &reltime); + + /* Now that we have the relative time, the remaining operations + * are equivalent to nxsig_nanosleep(). */ ret = nxsig_nanosleep(&reltime, rmtp); @@ -322,6 +328,8 @@ int clock_nanosleep(clockid_t clockid, int flags, if (ret < 0) { + /* If not set the errno variable and return -1 */ + set_errno(-ret); ret = ERROR; }