]> git.sesse.net Git - plocate/commitdiff
Increase hard file limit if possible.
authorSteinar H. Gunderson <steinar+git@gunderson.no>
Wed, 9 Dec 2020 23:37:41 +0000 (00:37 +0100)
committerSteinar H. Gunderson <steinar+git@gunderson.no>
Wed, 9 Dec 2020 23:37:41 +0000 (00:37 +0100)
Fixes issues where updatedb was run with a too-low open file limit
(both soft and hard), but by root, so we could just raise both limits.

Reported by Gregor Herrmann.

updatedb.cpp

index 8435a48b56f40ccaecf510913e15291050f336a9..17067b8d0d10e705048f7d76ab2cc0081a94027e 100644 (file)
@@ -742,6 +742,15 @@ int main(int argc, char **argv)
        // and can set whatever we want). 128k should be ample for most setups.
        rlimit rlim;
        if (getrlimit(RLIMIT_NOFILE, &rlim) != -1) {
+               // Even root cannot increase rlim_cur beyond rlim_max,
+               // so we need to try to increase rlim_max first.
+               // Ignore errors, though.
+               if (rlim.rlim_max < 131072) {
+                       rlim.rlim_max = 131072;
+                       setrlimit(RLIMIT_NOFILE, &rlim);
+                       getrlimit(RLIMIT_NOFILE, &rlim);
+               }
+
                rlim_t wanted = std::max<rlim_t>(rlim.rlim_cur, 131072);
                rlim.rlim_cur = std::min<rlim_t>(wanted, rlim.rlim_max);
                setrlimit(RLIMIT_NOFILE, &rlim);  // Ignore errors.