dccifd and SpamAssassin

Vernon Schryver vjs@calcite.rhyolite.com
Wed Jan 28 21:31:56 UTC 2004

> From: "Billy Ray Miller" <Miller_Billy_Ray@cat.com>

> ...
> I am trying  get SpamAssassin to use dccifd to check mail messages against
> DCC.  I think I have it mostly working, but dccifd keeps on crashing on me.
> These are the errors that I keep seeing in my logs:
> Jan 28 12:59:51 spambox dccifd[10919]: missing message body
> Jan 28 12:59:51 spambox mimedefang-multiplexor: Slave 2 stderr: DCCifd ->
> check skipped: Illegal seek Died at
> /usr/lib/perl5/site_perl/5.8.0/Mail/SpamAssassin/Dns.pm line 639.
> Jan 28 12:59:51 spambox dccifd[10919]: pthread_detach(): No such process;
> fatal error
> Jan 28 12:59:52 spambox mimedefang-multiplexor: Slave 0 stderr: DCCifd ->
> check skipped: Connection refused Can't call method "print" on an undefined
> value at /usr/lib/perl5/site_perl/5.8.0/Mail/SpamAssassin/Dns.pm line 622.
> After the "pthread_detach" error, the dccifd process is gone.  I am running
> Red Hat 9, SpamAssassin 2.61, and DCC 1.2.29 (it also did it with 1.2.26).
> ...

My guess is that

 - something wrong in mimedefang-multiplexor//SpamAssassin/Dns.pm//whatever
     is connecting to dccifd but immediately closing the socket
     instead of delivering a mail message.  Thus the "missing message body"
     complaint from dccifd.

     If I had to guess completely at random, I'd speculate that
     "Illegal seek" is results from a bug or full disk and that is
     causing dccifd to not receive the mail message.  

  - the Linux pthread scheduler is letting the dccifd thread started for that
     aborted transaction run to completion and quit before the main thread
     gets a chance to call pthread_detach().  

  - current versions of dccifd treat all failures of pthread_detach() as

The obvious fix is to move the pthread_detach() into the new thread, but
I vaguely recall that does not work on some POSIX threads implementations.
I think I had that trouble with Linux.

The next obvious fix is to pay attention to the return value of 
pthread_detach() and not worry if it is ESRCH.   I'll make that change
for 1.2.30.   Until I get 1.2.30 out, you might delete the dcc_logbad()
call at about line 530 in dccifd/dccifd.c in version 1.2.29 of DCC
source, and then run `make install`.

Vernon Schryver    vjs@rhyolite.com

More information about the DCC mailing list

Contact vjs@rhyolite.com by mail or use the form.