diff options
author | gshapiro <gshapiro@FreeBSD.org> | 2006-03-22 16:40:03 +0000 |
---|---|---|
committer | gshapiro <gshapiro@FreeBSD.org> | 2006-03-22 16:40:03 +0000 |
commit | ef9770707c0f88e94a0c4a409f8fb74cea250716 (patch) | |
tree | f3bd1c133ce6e698fd2ff3c0280c7103bfac7af3 /contrib/sendmail/libmilter/signal.c | |
parent | 3f99651e549f30e601bcde5ce7907ee58c365442 (diff) | |
download | FreeBSD-src-ef9770707c0f88e94a0c4a409f8fb74cea250716.zip FreeBSD-src-ef9770707c0f88e94a0c4a409f8fb74cea250716.tar.gz |
Import sendmail 8.13.6
Security: FreeBSD-SA-06:13.sendmail
Diffstat (limited to 'contrib/sendmail/libmilter/signal.c')
-rw-r--r-- | contrib/sendmail/libmilter/signal.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/contrib/sendmail/libmilter/signal.c b/contrib/sendmail/libmilter/signal.c index d55ab57..ad68469 100644 --- a/contrib/sendmail/libmilter/signal.c +++ b/contrib/sendmail/libmilter/signal.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2004 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2004, 2006 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -9,7 +9,7 @@ */ #include <sm/gen.h> -SM_RCSID("@(#)$Id: signal.c,v 8.42 2004/08/20 21:10:30 ca Exp $") +SM_RCSID("@(#)$Id: signal.c,v 8.44 2006/03/03 03:42:04 ca Exp $") #include "libmilter.h" @@ -90,7 +90,7 @@ static void * mi_signal_thread(name) void *name; { - int sig, errs; + int sig, errs, sigerr; sigset_t set; (void) sigemptyset(&set); @@ -103,19 +103,23 @@ mi_signal_thread(name) for (;;) { - sig = 0; + sigerr = sig = 0; #if defined(SOLARIS) || defined(__svr5__) if ((sig = sigwait(&set)) < 0) #else /* defined(SOLARIS) || defined(__svr5__) */ - if (sigwait(&set, &sig) != 0) + if ((sigerr = sigwait(&set, &sig)) != 0) #endif /* defined(SOLARIS) || defined(__svr5__) */ { + /* some OS return -1 and set errno: copy it */ + if (sigerr <= 0) + sigerr = errno; + /* this can happen on OSF/1 (at least) */ - if (errno == EINTR) + if (sigerr == EINTR) continue; smi_log(SMI_LOG_ERR, "%s: sigwait returned error: %d", - (char *)name, errno); + (char *)name, sigerr); if (++errs > MAX_FAILS_T) { mi_stop_milters(MILTER_ABRT); |