Replacing Sendmail with Postfix in the base system

Matthew Dillon dillon at apollo.backplane.com
Wed Jun 14 11:35:16 PDT 2006


:Hmm, is my English that bad? I _agree_ with most of your points, I
:do _not_ want to argue.  I just want to know about the ("race")
:"problems" in the libmilter code, because that's code I wrote. Just
:like you most likely would want to know details when I would write:
:"You don't deal with races in DragonFly".

    Well, for example, did you know that it is virtually impossible to use
    a DBM database in a threaded program due to the stupid POSIX-says-you-
    must-release-all-locks-on-close() problem?  You can't treat the threads
    as independant entities because of that locking issue.  Have you ever
    tried doing a DNS lookup from a threaded program?

    It took literally weeks for me to track down problems with my libmilter
    code due to the threading.

    I'll tell you what I want for a spam filter... just a simple unix
    domain socket that the filter can listen and accept connections on.
    Sendmail (or whatever) can then communicate by simply connecting to the
    socket.  Let the spam filter decide whether it wants to thread or fork.
    Simplify the protocol ... it's just a PIPE.  None of this callback crap.

    main()
    {
	...
	socket/bind/listen
	...
	accept/fork

	while ((state = get_milter_packet(fd)) != STATE_DEAD_CONNECTION) {
		... process state ...
		... return_milter_packet(responsecode, string) ...
	}
    }

    And that's IT.  That is all that is needed.  None of this threading
    crap.  None of these callbacks.... just a simple state machine and
    let the spam filter decide whether it wants to thread or not.

						-Matt






More information about the Users mailing list