diff options
author | Rich Felker <dalias@aerifal.cx> | 2015-01-15 07:09:14 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-01-15 07:09:14 -0500 |
commit | 472e8b71f7a90ab23f1499fd721b872541f52de9 (patch) | |
tree | 4b4be3ff0e05264ce4929eb80e02dee5a42e3029 /src/misc | |
parent | 996d148bf14b477b07fa3691bffeb930c67b2b62 (diff) | |
download | musl-472e8b71f7a90ab23f1499fd721b872541f52de9.tar.gz musl-472e8b71f7a90ab23f1499fd721b872541f52de9.tar.bz2 musl-472e8b71f7a90ab23f1499fd721b872541f52de9.tar.xz musl-472e8b71f7a90ab23f1499fd721b872541f52de9.zip |
for multithreaded set*id/setrlimit, handle case where callback does not run
in the current version of __synccall, the callback is always run, so
failure to handle this case did not matter. however, the upcoming
overhaul of __synccall will have failure cases, in which case the
callback does not run and errno is already set. the changes being
committed now are in preparation for that.
Diffstat (limited to 'src/misc')
-rw-r--r-- | src/misc/setrlimit.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/misc/setrlimit.c b/src/misc/setrlimit.c index 8a1b8cc6..7130d719 100644 --- a/src/misc/setrlimit.c +++ b/src/misc/setrlimit.c @@ -32,16 +32,16 @@ struct ctx { static void do_setrlimit(void *p) { struct ctx *c = p; - if (c->err) return; + if (c->err>0) return; c->err = -__setrlimit(c->res, c->rlim); } int setrlimit(int resource, const struct rlimit *rlim) { - struct ctx c = { .res = resource, .rlim = rlim }; + struct ctx c = { .res = resource, .rlim = rlim, .err = -1 }; __synccall(do_setrlimit, &c); if (c.err) { - errno = c.err; + if (c.err>0) errno = c.err; return -1; } return 0; |