]> Sergey Matveev's repositories - public-inbox.git/commitdiff
v2writable: nproc: use sysconf() on Linux and FreeBSD
authorEric Wong <e@80x24.org>
Wed, 27 Jan 2021 09:42:29 +0000 (03:42 -0600)
committerEric Wong <e@80x24.org>
Fri, 29 Jan 2021 05:04:40 +0000 (05:04 +0000)
No need to fork a process on platforms I use daily, at least.

lib/PublicInbox/V2Writable.pm

index 7f9342b08d36941d1784615739f300ebf532542f..35b7fe3049cf0943834141068e1f2815495592f5 100644 (file)
@@ -21,6 +21,7 @@ use PublicInbox::Search;
 use PublicInbox::SearchIdx qw(log2stack is_ancestor check_size is_bad_blob);
 use IO::Handle; # ->autoflush
 use File::Temp ();
+use POSIX ();
 
 my $OID = qr/[a-f0-9]{40,}/;
 # an estimate of the post-packed size to the raw uncompressed size
@@ -35,6 +36,11 @@ our $PACKING_FACTOR = 0.4;
 our $NPROC_MAX_DEFAULT = 4;
 
 sub detect_nproc () {
+       # _SC_NPROCESSORS_ONLN = 84 on both Linux glibc and musl
+       return POSIX::sysconf(84) if $^O eq 'linux';
+       return POSIX::sysconf(58) if $^O eq 'freebsd';
+       # TODO: more OSes
+
        # getconf(1) is POSIX, but *NPROCESSORS* vars are not
        for (qw(_NPROCESSORS_ONLN NPROCESSORS_ONLN)) {
                `getconf $_ 2>/dev/null` =~ /^(\d+)$/ and return $1;