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)".

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

Reply via email to