Wietse Venema: > Axel Luttgens: > > Hello, > > > > (Not sure whether the postfix-devel list is the right place for > > such matters; please let me know if another place, for example the > > postfix-users list, would be more suitable) > > The place is OK. > > > Starting with Mac OS X 10.5, the man page for setrlimit(2) comes > > with following compatibility section: > > > > setrlimit() now returns with errno set to EINVAL in places that > > historically succeeded. It no longer accepts "rlim_cur = RLIM_INFINITY" > > for RLIM_NOFILE. Use "rlim_cur = min(OPEN_MAX, rlim_max)".
You might want to file a MacOS bug report. According to SUSV2 (Single UNIX Specification, Version 2, from 1997) Specifying RLIM_INFINITY as any resource limit value on a successful call to setrlimit() inhibits enforcement of that resource limit. http://pubs.opengroup.org/onlinepubs/7908799/xsh/getrlimit.html Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition: Specifying RLIM_INFINITY as any resource limit value on a successful call to setrlimit() shall inhibit enforcement of that resource limit. http://pubs.opengroup.org/onlinepubs/009696799/functions/getrlimit.html Based on this I think that a conforming setrlimit() implementation must accept RLIM_INFINITY as "any resource limit value". resource limit value. Wietse > Postfix does not ask for RLIM_INFINITY file descriptors (if someone > modified Postfix, you should bug the guilty party instead). > > How can this code: > > if (limit > 0) { > if (limit > rl.rlim_max) > rl.rlim_cur = rl.rlim_max; > else > rl.rlim_cur = limit; > setrlimit(RLIMIT_NOFILE, &rl) > > produce an error for any "limit" value > 0? Does rlim_max contain > a value that is not allowed for rlim_cur? That would warrant a MacOS > bugreport, as the rlim_max value came from the MacOS system itself, > not from Postfix. > > Please print the rlim_max value and report it on the list. > > This would need to be verified before I will make any code changes > for Postfix. > > > +#ifdef MACOSX > > + if (limit > OPEN_MAX) limit = OPEN_MAX; > > +#endif > > Assuming that the above problem is real, your solution would seriously > cripple Postfix. OPEN_MAX is a constant; it is a lower bound (a > measly 64 on FreeBSD which sits under much of MacOS). > > Such a tiny number may be OK for simple apps but not for Postfix > which needs to be able to scale up with real hardware. > > I think a better solution would be based on sysconf(_SC_OPEN_MAX) > which reflects the true system limit. > > if (limit > 0) { > long sysconf_limit; > > sysconf_limit = sysconf(_SC_OPEN_MAX); > if (sysconf_limit < 0) > return (-1); > if (limit > sysconf_limit) > limit = real_limit; > ... > > That way we have an authoritative estimate of what the system > can do for Postfix. > > Wietse >