Re: 2.9.1 Beta1 available

From: Murray S. Kucherawy <msk_at_blackops.org>
Date: Tue, 21 Jan 2014 13:22:13 -0800 (PST)

On Tue, 21 Jan 2014, Scott Kitterman wrote:
> Libmilter is whichever version is shipped with Sendmail 8.14.4.
>
> I have a suspicion that the problem is related to the amount of time it
> takes for the milter to shut down as fiddling with
> MILTERTEST_RETRY_SPEED_FACTOR seems to help and the number of failing
> tests varies per architecture in the Debian archive. It also,
> sometimes, varies when I retry with the same package on the same
> architecture.

The issue is that the configuration object (of which there should be only
one) appears to have a reference count that isn't zero when something
tries to destroy the object. The reference count increases when a new
client connects, and decreases when a client disconnects. For a test
where there's only ever one client, the test should really never fail.

Given what you said above, it looks like there's a race condition between
a client connecting (and incrementing the refcount) and miltertest giving
up, closing the connection, and making a new attempt. But this would
suggest there's possibly an issue with libmilter; it shouldn't be possible
to complete connection setup without going through connection shutdown.
I'll see if there's anything like this known.

> If you can give me the command line to invoke one of those tests to get
> a core, I'll do it by hand and see what I get.

After a full build, you'd have to do this:

- add these to the .lua file for the failing test, right before
mt.connect():

         mt.set_timeout(300)
         mt.sleep(15)

- add "-v -v -v" to the miltertest command in the test shell script; this
will cause the pid of the child opendkim to be shown when it's created

- run the script; the child will be created, but no traffic will be sent
to it for 15 seconds (the mt.sleep())

- attach gdb to the child opendkim (the pid will be shown in the script
output)

- miltertest will resume and you should see the failure resulting in
SIGABRT; the mt.set_timeout() call will keep miltertest waiting for five
minutes while you poke around

- use whatever gdb commands you like to poke around, e.g. "thread apply
all bt"

- "quit" when you're done; miltertest will complete (but fail, of course)

-MSK
Received on Tue Jan 21 2014 - 21:22:33 PST

This archive was generated by hypermail 2.3.0 : Tue Jan 21 2014 - 21:27:01 PST