Re: Queue manager unix domain socket connect() deadlock prevention.

From: Wietse Venema (no email)
Date: Mon Dec 01 2003 - 09:46:39 EST


:
> On Mon, 1 Dec 2003, Wietse Venema wrote:
>
> > > The NetBSD folks may put together a suitable small test program (that
> > > emulates the queue manager and a concurrency limited set of delivery
> > > agents). If we find enough testers to cover all supported platforms would
> > > that be enough to make the change in a snapshot after 2.1?
> >
> > This change to Postfix shall be platform and version dependent.
> >
> > There is no reason to make retroactive platform or version
> > indepedent changes to Postfix.
>
> This is consistent with my expectations. So at this time nothing needs to
> or will be changed. I would change the code to always make non-blocking
> connect() calls, but I am less conservative than you, and it is probably
> someone as reckless as I who caused the brief NetBSD fiasco! :-)

Never make untested retroactive changes to system dependent code.

To give you an example, someone sent me a patch that changed the
default socket call length argument type, from int to socklen_t,
because that is POSIX compliant. I had to reject this because
Postfix would no longer compile on some of the supported systems.

Instead I added little blobs of code like this:

    #if __NetBSD_Version__ >= 106000000 /* XXX */
    #define SOCKADDR_SIZE socklen_t
    #define SOCKOPT_SIZE socklen_t
    #endif

The XXX is because they probably introduced this before NetBSD 1.6.

    #if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
    #define SOCKADDR_SIZE socklen_t
    #define SOCKOPT_SIZE socklen_t
    #endif
    #endif

No XXX here because socklen_t was introduced with GLIBC version 2.1.

        Wietse








Hosted Email Solutions

Invaluement Anti-Spam DNSBLs



Powered By FreeBSD   Powered By FreeBSD