diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2000-08-05 01:09:52 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2000-08-05 01:09:52 +0000 |
commit | e7d8fdfd21eae05bfe5f4ed74ca39f2454e50d21 (patch) | |
tree | e6b51a209bdd9f345b71ba3f10397fd0038f0b41 | |
parent | f3aaa76ed2539cb9fbb8a43971355d780d3ac102 (diff) |
talk about errno; and try to list sighandler safe functions
-rw-r--r-- | lib/libc/sys/sigaction.2 | 118 |
1 files changed, 117 insertions, 1 deletions
diff --git a/lib/libc/sys/sigaction.2 b/lib/libc/sys/sigaction.2 index a1a5d70b623..9dedc30e33e 100644 --- a/lib/libc/sys/sigaction.2 +++ b/lib/libc/sys/sigaction.2 @@ -1,4 +1,4 @@ -.\" $OpenBSD: sigaction.2,v 1.21 2000/01/22 12:00:43 aaron Exp $ +.\" $OpenBSD: sigaction.2,v 1.22 2000/08/05 01:09:51 deraadt Exp $ .\" $NetBSD: sigaction.2,v 1.7 1995/10/12 15:41:16 jtc Exp $ .\" .\" Copyright (c) 1980, 1990, 1993 @@ -337,6 +337,122 @@ is not allowed to block or .Dv SIGSTOP . Any attempt to do so will be silently ignored. +.Pp +The following functions are either reentrant or not interruptible +by signals and are async-signal safe. Therefore applications may +invoke them, without restriction, from signal-catching functions: +.Pp +.Bd -ragged -offset indent +.Xr _exit 2 , +.Xr access 2 , +.Xr alarm 3 , +.Xr cfgetispeed 3 , +.Xr cfgetospeed 3 , +.Xr cfsetispeed 3 , +.Xr cfsetospeed 3 , +.Xr chdir 2 , +.Xr chmod 2 , +.Xr chown 2 , +.Xr close 2 , +.Xr creat 2 , +.Xr dup 2 , +.Xr dup2 2 , +.Xr execle 2 , +.Xr execve 2 , +.Xr fcntl 2 , +.Xr fork 2 , +.Xr fpathconf 2 , +.Xr fstat 2 , +.Xr fsync 2 , +.Xr getegid 2 , +.Xr geteuid 2 , +.Xr getgid 2 , +.Xr getgroups 2 , +.Xr getpgrp 2 , +.Xr getpid 2 , +.Xr getppid 2 , +.Xr getuid 2 , +.Xr kill 2 , +.Xr link 2 , +.Xr lseek 2 , +.Xr mkdir 2 , +.Xr mkfifo 2 , +.Xr open 2 , +.Xr pathconf 2 , +.Xr pause 2 , +.Xr pipe 2 , +.Xr raise 3 , +.Xr read 2 , +.Xr rename 2 , +.Xr rmdir 2 , +.Xr setgid 2 , +.Xr setpgid 2 , +.Xr setsid 2 , +.Xr setuid 2 , +.Xr sigaction 2 , +.Xr sigaddset 3 , +.Xr sigdelset 3 , +.Xr sigemptyset 3 , +.Xr sigfillset 3 , +.Xr sigismember 3 , +.Xr signal 3 , +.Xr sigpending 2 , +.Xr sigprocmask 2 , +.Xr sigsuspend 2 , +.Xr sleep 3 , +.Xr stat 2 , +.Xr sysconf 3 , +.Xr tcdrain 3 , +.Xr tcflow 3 , +.Xr tcflush 3 , +.Xr tcgetattr 3 , +.Xr tcgetpgrp 3 , +.Xr tcsendbreak 3 , +.Xr tcsetattr 3 , +.Xr tcsetpgrp 3 , +.Xr time 3 , +.Xr times 3 , +.Xr umask 2 , +.Xr uname 3 , +.Xr unlink 2 , +.Xr utime 3 , +.Xr wait 2 , +.Xr waitpid 2 , +.Xr write 2 . +.Xr sigpause 3 , +.Xr sigset 3 . +.\" .Fn aio_error , +.\" .Fn clock_gettime , +.\" .Fn timer_getoverrun , +.\" .Fn aio_return , +.\" .Fn fdatasync , +.\" .Fn sigqueue , +.\" .Fn timer_gettime , +.\" .Fn aio_suspend , +.\" .Fn sem_post , +.\" .Fn timer_settime . +.Ed +.Pp +All functions not in the above lists are considered to be unsafe +with respect to signals. That is to say, the behaviour of such +functions when called from a signal handler is undefined. +.Pp +As well, it is advised that signal handlers be careful to gaurd against +modification of the external symbol +.Va errno , +by the above functions, and consider saving it at entry and restoring +it on return, thus: +.Bd -literal -offset indent +void +handler(sig) +{ + int save_errno = errno; + + ... + errno = save_errno; +} +.Ed +.Pp .Sh RETURN VALUES A 0 value indicates that the call succeeded. A \-1 return value indicates an error occurred and |