Thank you, I applied this to master.
On Thu, May 02, 2013 at 01:43:28PM -0700, Andy Zhou wrote: > Looks good. > > > On Wed, May 1, 2013 at 11:38 AM, Ben Pfaff <b...@nicira.com> wrote: > > > POSIX says that multithreaded programs must not use sigprocmask() but must > > use pthread_sigmask() instead. This commit makes that replacement. > > > > The actual use of signals in Open vSwitch is still not thread safe > > following this commit, but this change is a necessary prerequisite for > > fixing the other problems. > > > > Signed-off-by: Ben Pfaff <b...@nicira.com> > > --- > > lib/process.c | 6 +++--- > > lib/signals.c | 9 +++++---- > > lib/signals.h | 4 ++-- > > lib/timeval.c | 4 ++-- > > 4 files changed, 12 insertions(+), 11 deletions(-) > > > > diff --git a/lib/process.c b/lib/process.c > > index 795a136..9fe742c 100644 > > --- a/lib/process.c > > +++ b/lib/process.c > > @@ -640,7 +640,7 @@ sigchld_is_blocked(void) > > { > > sigset_t sigs; > > > > - xsigprocmask(SIG_SETMASK, NULL, &sigs); > > + xpthread_sigmask(SIG_SETMASK, NULL, &sigs); > > return sigismember(&sigs, SIGCHLD); > > } > > > > @@ -651,11 +651,11 @@ block_sigchld(sigset_t *oldsigs) > > > > sigemptyset(&sigchld); > > sigaddset(&sigchld, SIGCHLD); > > - xsigprocmask(SIG_BLOCK, &sigchld, oldsigs); > > + xpthread_sigmask(SIG_BLOCK, &sigchld, oldsigs); > > } > > > > static void > > unblock_sigchld(const sigset_t *oldsigs) > > { > > - xsigprocmask(SIG_SETMASK, oldsigs, NULL); > > + xpthread_sigmask(SIG_SETMASK, oldsigs, NULL); > > } > > diff --git a/lib/signals.c b/lib/signals.c > > index 06c2e75..f31bc52 100644 > > --- a/lib/signals.c > > +++ b/lib/signals.c > > @@ -1,5 +1,5 @@ > > /* > > - * Copyright (c) 2008, 2009, 2011, 2012 Nicira, Inc. > > + * Copyright (c) 2008, 2009, 2011, 2012, 2013 Nicira, Inc. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -168,9 +168,10 @@ xsigaction(int signum, const struct sigaction *new, > > struct sigaction *old) > > } > > > > void > > -xsigprocmask(int how, const sigset_t *new, sigset_t *old) > > +xpthread_sigmask(int how, const sigset_t *new, sigset_t *old) > > { > > - if (sigprocmask(how, new, old)) { > > - VLOG_FATAL("sigprocmask failed (%s)", strerror(errno)); > > + int error = pthread_sigmask(how, new, old); > > + if (error) { > > + VLOG_FATAL("pthread_sigmask failed (%s)", strerror(error)); > > } > > } > > diff --git a/lib/signals.h b/lib/signals.h > > index ac96b0f..641bcbb 100644 > > --- a/lib/signals.h > > +++ b/lib/signals.h > > @@ -1,5 +1,5 @@ > > /* > > - * Copyright (c) 2008, 2011 Nicira, Inc. > > + * Copyright (c) 2008, 2011, 2013 Nicira, Inc. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -31,6 +31,6 @@ void signal_wait(struct signal *); > > const char *signal_name(int signum); > > > > void xsigaction(int signum, const struct sigaction *, struct sigaction > > *old); > > -void xsigprocmask(int how, const sigset_t *, sigset_t *old); > > +void xpthread_sigmask(int how, const sigset_t *, sigset_t *old); > > > > #endif /* signals.h */ > > diff --git a/lib/timeval.c b/lib/timeval.c > > index 163de1e..f687c96 100644 > > --- a/lib/timeval.c > > +++ b/lib/timeval.c > > @@ -454,13 +454,13 @@ block_sigalrm(sigset_t *oldsigs) > > sigset_t sigalrm; > > sigemptyset(&sigalrm); > > sigaddset(&sigalrm, SIGALRM); > > - xsigprocmask(SIG_BLOCK, &sigalrm, oldsigs); > > + xpthread_sigmask(SIG_BLOCK, &sigalrm, oldsigs); > > } > > > > static void > > unblock_sigalrm(const sigset_t *oldsigs) > > { > > - xsigprocmask(SIG_SETMASK, oldsigs, NULL); > > + xpthread_sigmask(SIG_SETMASK, oldsigs, NULL); > > } > > > > long long int > > -- > > 1.7.2.5 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev