erik quanstrom wrote:
d'oh!  the return value from catchalarm looks reversed.  from notify(2)

          [...] A handler must
          return a non-zero number if the note was recognized (and
          resolved); otherwise it must return zero.  When the system
i think you're getting into some sort of note loop. i think it would
be helpful to log all notes.  i would try something like this
its not a good idea to call syslog() in a note handler, because it aquires locks
and calls into the memory allocator by strdup() (that too aquires locks).

if the note interrupts the program while in syslog() or the allocator, it will deadlock.

--
cinap
static int
catchalarm(void *, char *msg)
{
        static int chattycathy;

        if(chattycathy++ > 5)
                return 0;
        if(senders.first && rcvers.first)
                syslog(0, "smtpd", "note: %s->%s: %s",
                        s_to_c(senders.first->p),
                        s_to_c(rcvers.first->p), msg);
        else
                syslog(0, "smtpd", "note: %s", msg);
        if(pp){
                syskillpg(pp->pid);
                pp = 0;
        }
        return strstr(msg, "alarm") != 0;
}

but at a minimum, i would reverse the return values.

- erik


Reply via email to