From: Lennart Poettering Date: Tue, 20 Aug 2019 12:07:09 +0000 (+0200) Subject: varlink: port varlink code over to use getdtablesize() for sizing number of concurren... X-Git-Tag: v244-rc1~3^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88a36d369015674e3f9eb20f0fc4d33beedd91bb;p=thirdparty%2Fsystemd.git varlink: port varlink code over to use getdtablesize() for sizing number of concurrent connections Use the official glibc API for determining this parameter. In most other cases in our tree it's better to go directly for RLIMIT_NOFILE since it's semantically what we want, but for this case it appears more appropriate to use the friendlier, shorter, explicit API. --- diff --git a/src/shared/varlink.c b/src/shared/varlink.c index a23525b0a45..ac8930302a2 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -2406,17 +2406,18 @@ int varlink_server_bind_connect(VarlinkServer *s, VarlinkConnect callback) { } unsigned varlink_server_connections_max(VarlinkServer *s) { - struct rlimit rl; + int dts; /* If a server is specified, return the setting for that server, otherwise the default value */ if (s) return s->connections_max; - assert_se(getrlimit(RLIMIT_NOFILE, &rl) >= 0); + dts = getdtablesize(); + assert_se(dts > 0); /* Make sure we never use up more than ¾th of RLIMIT_NOFILE for IPC */ - if (VARLINK_DEFAULT_CONNECTIONS_MAX > rl.rlim_cur / 4 * 3) - return rl.rlim_cur / 4 * 3; + if (VARLINK_DEFAULT_CONNECTIONS_MAX > (unsigned) dts / 4 * 3) + return dts / 4 * 3; return VARLINK_DEFAULT_CONNECTIONS_MAX; }