summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2024-05-23 14:28:02 -0400
committerTavian Barnes <tavianator@tavianator.com>2024-05-23 14:34:33 -0400
commit65a7814b2dbc10ea86610092f03d0c1df95d08ad (patch)
tree3075cb84811b6be8dba357f96dcbbf955905b2e3 /src/eval.c
parent07b0c50e94543a88f699fa60b577d8e53c978ff1 (diff)
downloadbfs-65a7814b2dbc10ea86610092f03d0c1df95d08ad.tar.xz
opt: Don't raise RLIMIT_NOFILE if it would prevent using posix_spawn()
If we raise RLIMIT_NOFILE, we have to lower it before calling exec() for compatibility with select(). If posix_spawn() doesn't support that, we fall back to fork(), which is quite a bit slower. Therefore, if we're going to exec() on most files, it's better to keep RLIMIT_NOFILE the same to avoid the fork() cost, even though it makes bftw() somewhat slower.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index 2ca4a1f..8863e34 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1466,6 +1466,9 @@ done:
static int raise_fdlimit(struct bfs_ctx *ctx) {
rlim_t cur = ctx->orig_nofile.rlim_cur;
rlim_t max = ctx->orig_nofile.rlim_max;
+ if (!ctx->raise_nofile) {
+ max = cur;
+ }
rlim_t target = 64 << 10;
if (rlim_cmp(target, max) > 0) {