[Mimedefang] Mimedefang sometime doesn't timeout Mail::SpamAssassin::Timeout parts in SA plugins

David F. Skoll dfs at roaringpenguin.com
Thu Apr 13 10:29:41 EDT 2006


Martin Blapp wrote:

> This Plugin works in Spamassassin, but in mimedefang sometimes some of
> the timeouts get ignored.

Does it work if you disable the embedded Perl feature?

> I suspect that some signal problems between Mdefang and SA. Maybe Mdefang
> ignores some signals and SA doesn't receive anything back. Btw, I'm using
> embedded perl 5.8.8.

The multiplexor sets actions for SIGINT, SIGHUP and SIGTERM, which shouldn't
affect SA.  It also sets a SIGCHLD action, but all of these handlers
are reset when it forks a slave:

    signal(SIGTERM, SIG_DFL);
    signal(SIGCHLD, SIG_DFL);
    signal(SIGHUP, SIG_DFL);
    signal(SIGINT, SIG_DFL);
    sigemptyset(&sigs);
    sigprocmask(SIG_BLOCK, &sigs, NULL);

Timeouts in SpamAssassin are (to the best of my recollection) implemented
with SIGALRM, which by itself is evidence of scariness, but I don't think
MIMEDefang should affect SA.

>         # Or do something that loads this slave a lot !
>                 dbg("bugtest: Before sleep of 100 seconds");
>                 system("sleep 100");
>                 dbg("bugtest: After sleep of 100 seconds");
>         });

This is an excerpt from the Linux alarm() man page:

       sleep()  may  be implemented using SIGALRM; mixing calls to alarm() and
       sleep() is a bad idea.

I'm not sure if this is true on FreeBSD, but maybe try implementing
your 100-second wait with something like this:

       select(undef, undef, undef, 100);

Regards,

David.



More information about the MIMEDefang mailing list