dccifd: restart after signal 6

MrC lists-dcc@cappella.us
Fri Jun 5 20:53:00 UTC 2009


On 6/5/2009 11:38 AM, MrC wrote:
> On 6/5/2009 11:14 AM, Vernon Schryver wrote:
>
>> Signal 6 generally comes from the abort() library function. That
>> ought to be associated with a system log complaint about a major problem.
>>
> Yup. The only other log message I have is generated by amavisd-new,
> which just passed on the info from SpamAssassin:
>
> May 30 16:57:33 glacier amavis[14242]: (14242-02) _WARN: dcc: dccifd ->
> check skipped: failed to read header at
> /usr/pkg/lib/perl5/vendor_perl/5.10.0/Mail/SpamAssassin/Plugin/DCC.pm
> line 471.
> May 30 16:57:33 glacier dccifd[1484]: restart after signal 6
> May 30 16:57:33 glacier dccifd[21099]: 1.3.105 listening to
> /var/dcc/dccifd for ASCII protocol
>
>> There should also be a core file in the DCC home directory. That core
>> file might be useful with gdb if dccifd has been built with
>> debugging information.
>
> There was, but I had not built w/debug.
>
>> To rebuild the DCC software with debugging information, run
>>
>> .../libexec/updatedcc -e DBGFLAGS=-g
>
> Done - now awaiting core file production.

As expected, this is the result of a kill(2) call.

#0  0xbbaf923f in kill () from /usr/lib/libc.so.12
#1  0xbbb95a64 in abort () from /usr/lib/libc.so.12
#2  0xbbbdc60c in __res_state () from /usr/lib/libpthread.so.0
#3  0x0806b9ca in dcc_res_delays (budget=4) at get_port.c:476
#4  0x080660f2 in dcc_clnt_rdy (emsg=0xb91fff50 "", ctxt=0x80c9000, 
clnt_fgs=8 '\b') at clnt_send.c:1740
#5  0x080544dc in clnt_resolve_thread (arg=0x0) at clnt_threaded.c:394
#6  0xbbbe562d in pthread_join () from /usr/lib/libpthread.so.0
#7  0xbbb1aa2c in swapcontext () from /usr/lib/libc.so.12


This comes from Mail/SpamAssassin/Plugin/DCC.pm :

     # send the options and other parameters to the daemon
     $sock->print("header " . $opts . "\n") || dbg("dcc: failed write") 
&& die; # options
     $sock->print($client . "\n") || dbg("dcc: failed write") && die; # 
client
     $sock->print($helo . "\n") || dbg("dcc: failed write") && die; # 
HELO value
     $sock->print("\n") || dbg("dcc: failed write") && die; # sender
     $sock->print("unknown\r\n") || dbg("dcc: failed write") && die; # 
recipients
     $sock->print("\n") || dbg("dcc: failed write") && die; # recipients

     $sock->print($$fulltext);

     $sock->shutdown(1) || dbg("dcc: failed socket shutdown: $!") && die;

     $sock->getline() || dbg("dcc: failed read status") && die;
     $sock->getline() || dbg("dcc: failed read multistatus") && die;

 >>>> so we failed to getlines() from the socket ...

     my @null = $sock->getlines();

 >>>> and then die... :

     if (!@null) {
       # no facility prefix on this
       die("failed to read header\n");
     }


     # the first line will be the header we want to look at
     chomp($response = shift @null);
     # but newer versions of DCC fold the header if it's too long...
     while (my $v = shift @null) {
       last unless ($v =~ s/^\s+/ /);  # if this line wasn't folded, stop
       chomp $v;
       $response .= $v;
     }

     dbg("dcc: dccifd got response: $response");

   });

   $permsgstatus->leave_helper_run_mode();

   if ($timer->timed_out()) {
     dbg("dcc: dccifd check timed out after $timeout secs.");
     return 0;
   }

 >>>> but the die is caught, and this message output:

   if ($err) {
     chomp $err;
     warn("dcc: dccifd -> check skipped: $! $err");
     return 0;
   }




More information about the DCC mailing list

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