Module Name: src Committed By: roy Date: Sat Jul 19 14:53:22 UTC 2014
Modified Files: src/lib/libc/gen: arc4random.c pthread_atfork.3 src/share/man/man7: signal.7 Log Message: Document that our use of pthread_mutex_unlock(3) is async-signal-safe and as such can be used in a phtread_atfork(3) child handler. To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/lib/libc/gen/arc4random.c cvs rdiff -u -r1.5 -r1.6 src/lib/libc/gen/pthread_atfork.3 cvs rdiff -u -r1.16 -r1.17 src/share/man/man7/signal.7 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/gen/arc4random.c diff -u src/lib/libc/gen/arc4random.c:1.24 src/lib/libc/gen/arc4random.c:1.25 --- src/lib/libc/gen/arc4random.c:1.24 Thu Jun 12 19:12:19 2014 +++ src/lib/libc/gen/arc4random.c Sat Jul 19 14:53:22 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: arc4random.c,v 1.24 2014/06/12 19:12:19 apb Exp $ */ +/* $NetBSD: arc4random.c,v 1.25 2014/07/19 14:53:22 roy Exp $ */ /* $OpenBSD: arc4random.c,v 1.6 2001/06/05 05:05:38 pvalchev Exp $ */ /* @@ -27,7 +27,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: arc4random.c,v 1.24 2014/06/12 19:12:19 apb Exp $"); +__RCSID("$NetBSD: arc4random.c,v 1.25 2014/07/19 14:53:22 roy Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -125,6 +125,12 @@ arc4_fork_child(void) static inline void arc4_check_init(struct arc4_stream *as) { + /* + * pthread_atfork(3) only allows async-signal-safe functions in + * the child handler. + * NetBSD's mutex_unlock is async-signal safe, other implementations + * may not be. + */ if (__predict_false(!as->inited)) { as->inited = true; Index: src/lib/libc/gen/pthread_atfork.3 diff -u src/lib/libc/gen/pthread_atfork.3:1.5 src/lib/libc/gen/pthread_atfork.3:1.6 --- src/lib/libc/gen/pthread_atfork.3:1.5 Wed Apr 30 13:10:50 2008 +++ src/lib/libc/gen/pthread_atfork.3 Sat Jul 19 14:53:22 2014 @@ -1,4 +1,4 @@ -.\" $NetBSD: pthread_atfork.3,v 1.5 2008/04/30 13:10:50 martin Exp $ +.\" $NetBSD: pthread_atfork.3,v 1.6 2014/07/19 14:53:22 roy Exp $ .\" .\" Copyright (c) 2003 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,7 +27,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 12, 2003 +.Dd July 18, 2014 .Dt PTHREAD_ATFORK 3 .Os .Sh NAME @@ -91,7 +91,9 @@ The following error code may be returned Insufficient memory exists to register the fork handlers. .El .Sh SEE ALSO -.Xr fork 2 +.Xr fork 2 , +.Xr pthread_mutex 3 , +.Xr signal 7 .Sh STANDARDS The .Fn pthread_atfork @@ -115,6 +117,11 @@ functions are not async-signal-safe, so in the .Ar child handler. +POSIX does not mandate that +.Fn pthread_mutex_unlock +be async-signal-safe, but it is in NetBSD and thus safe to use within the +.Ar child +handler. .Sh BUGS There is no way to unregister a handler registered with .Fn pthread_atfork . Index: src/share/man/man7/signal.7 diff -u src/share/man/man7/signal.7:1.16 src/share/man/man7/signal.7:1.17 --- src/share/man/man7/signal.7:1.16 Wed Jan 19 04:33:13 2011 +++ src/share/man/man7/signal.7 Sat Jul 19 14:53:22 2014 @@ -1,4 +1,4 @@ -.\" $NetBSD: signal.7,v 1.16 2011/01/19 04:33:13 uwe Exp $ +.\" $NetBSD: signal.7,v 1.17 2014/07/19 14:53:22 roy Exp $ .\" .\" Copyright (c) 1999 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -24,7 +24,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 27, 2009 +.Dd July 18, 2014 .Dt SIGNAL 7 .Os .Sh NAME @@ -148,6 +148,7 @@ below is unsafe to use in signal handler .Xr poll 2 , .\" .Xr posix_trace_event 2 .\" .Xr pselect 2 +.Xr pthread_mutex_unlock 3 , .Xr raise 3 , .Xr read 2 , .Xr readlink 2 ,