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
fatal.
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