Milter (dcc): to error state

Vernon Schryver
Thu Feb 27 15:36:37 UTC 2003

> From: Andrew Macpherson <>

> Primarily along with sendmail effectively locking up, but also after 
> restarting dccm in an attempt to clear that lockup.  In the second case the 
> message appears as a pairing thus:
> Feb 27 08:24:52 ns1 sm-mta[16032]: h1R8OgF9016032: Milter (dcc): timeout 
> before data read
> Feb 27 08:24:52 ns1 sm-mta[16032]: h1R8OgF9016032: Milter (dcc): to error 
> state

When sendmail thinks a milter filter has spent too much time or
timed out, it should go "to error state" and either ignore the
filter for the indicated mail message or tell the SMTP client to
try again later with a 4yz response.

The locking up sounds like a more serious problem.  Is there any
evidence what that is about?

What milter timeouts are set in
What version of sendmail is involved?  8.12.4 seems recent enough
to not have the ancient sendmail milter bugs.

> Possibly related note what controls how many dccm threads activate?  On 
> startup I get 4, where I would be inclined to configure 14 if I knew where, 
> along the same lines as pre-starting 20 imap daemons

The total number of dccm threads started is controlled by the sendmail
libmilter library.  When dccm is started, three maintenance threads
are started.  One is from the libmilter code to deal with signals,
the second is from dccm to log the midnight message about total mail
messages, and the third is from dccm to deal with resolving the names
of DCC servers to IP addresses.  The will be a fourth thread running
select() to watch fro connections from sendmail.  Depending on the
POSIX threads implementation (e.g. Linux), there can be a fifth thread
that seems to involve maintenance work inside the threads package.

Each incoming mail message cases sendmail to start at TCP connection
to the milter filter process.  The thread running select() in the
sendmail libmilter code in the filter process will awaken and start
a thread to talk to sendmail for the mail message.  At the end of
the mail message, the thread will die.  Dccm limits the number
concurrent threads based on th `dccm -j` value and guesses about the
maximum possible number of open files.   If the sendmail libmilter
code starts a thread when there are already too many, dccm code tells
sendmail "SMFIS_TEMPFAIL" and dies.  "SMFIS_TEMPFAIL" should cause
sendmail to respond to the initial TCP connection from distant the
SMTP client with a 4yz response instead of normal 220 banner.

Vernon Schryver

More information about the DCC mailing list

Contact by mail or use the form.