nice() error handling
authorBruce Cran <bruce@cran.org.uk>
Mon, 20 Feb 2012 06:59:06 +0000 (07:59 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 20 Feb 2012 06:59:06 +0000 (07:59 +0100)
I've attached a patch which fixes a potential issue I noticed while
reading the POSIX specs: nice() can succeed and return -1, so it's
recommended to set errno to 0 and check it afterwards:

"As -1 is a permissible return value in a successful situation, an
application wishing to check for error situations should set errno to 0,
then call nice(), and if it returns -1, check to see whether errno is
non-zero."

Signed-off-by: Jens Axboe <axboe@kernel.dk>
backend.c

index e567ad5e1e8e4f0f78986c26ba6550013116a7e6..6e0e4424d6f6ce31d32ff6cf5d2ca77ba09111c2 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -1019,7 +1019,8 @@ static void *thread_main(void *data)
        if (td->o.cgroup_weight && cgroup_setup(td, cgroup_list, &cgroup_mnt))
                goto err;
 
-       if (nice(td->o.nice) == -1) {
+       errno = 0;
+       if (nice(td->o.nice) == -1 && errno != 0) {
                td_verror(td, errno, "nice");
                goto err;
        }