NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: bin/41302: cron dies at startup

   From: "Jeremy C. Reed" <>
   Subject: Re: bin/41302: cron dies at startup
   Date: Wed, 29 Apr 2009 09:02:17 -0500 (CDT)
    I wonder if this is related to

i think it's the same problem.

that one is very strange.  clearly it is dying in daemon() right
after fork returns... but it has something to do with SIGHUP occuring
right at this moment:

   429      1 cron     CALL  fork
   429      1 cron     RET   fork 343/0x157
   429      1 cron     CALL  exit(0)
   343      1 cron     EMUL  "netbsd"
   343      1 cron     PSIG  SIGHUP caught handler=0x102880 mask=(): 
   343      1 cron     RET   fork 0
   343      1 cron     CALL  setcontext(0xffffffffffffb660)
   343      1 cron     RET   setcontext JUSTRETURN
   343      1 cron     CALL  getpid
   343      1 cron     RET   getpid 343/0x157, 1
   343      1 cron     CALL  gettimeofday(0xffffffffffffab40,0)
   343      1 cron     RET   gettimeofday 0

429 is the parent, and 343 is the child.  the parent fork()'s and exits
just like in daemon() but the child doesn't really get to run any more.
the first thing it should do is call setsid(), but we don't see that
before we see the failure starting (getpid/gettimeofday both are used
to generate the failure message.)

cron has a SIGHUP handler that looks like:

static void
sighup_handler(int x __unused)

log_close(void) { 
        if (LogFD != ERR) {
                LogFD = ERR;

in the above log, pid 343 starts in emul netbsd, gets a SIGHUP and
has a handler (does it run here?  i'm not sure.) but then we get
the RET into this child right after, and then a setcontext... i'm
not sure what exactly is going on here, but this is clearly where
it all goes wrong.  why is a SIGHUP happening, and why is it making
the child fail?


Home | Main Index | Thread Index | Old Index