Index: lib/libc/gen/Makefile.inc =================================================================== RCS file: /home/ncvs/src/lib/libc/gen/Makefile.inc,v retrieving revision 1.131 diff -u -u -r1.131 Makefile.inc --- lib/libc/gen/Makefile.inc 26 Jan 2008 17:09:40 -0000 1.131 +++ lib/libc/gen/Makefile.inc 11 Mar 2008 07:33:59 -0000 @@ -59,7 +59,7 @@ nice.3 nlist.3 pause.3 popen.3 pselect.3 psignal.3 pwcache.3 \ raise.3 rand48.3 readpassphrase.3 rfork_thread.3 \ scandir.3 sem_destroy.3 sem_getvalue.3 sem_init.3 \ - sem_open.3 sem_post.3 sem_wait.3 \ + sem_open.3 sem_post.3 sem_timedwait.3 sem_wait.3 \ setjmp.3 setmode.3 setproctitle.3 \ siginterrupt.3 signal.3 sigsetops.3 sleep.3 \ statvfs.3 stringlist.3 \ --- /dev/null 2008-03-11 15:33:00.000000000 +0800 +++ lib/libc/gen/sem_timedwait.3 2008-03-11 15:34:33.000000000 +0800 @@ -0,0 +1,134 @@ +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice(s), this list of conditions and the following disclaimer as +.\" the first lines of this file unmodified other than the possible +.\" addition of one or more copyright notices. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice(s), this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY +.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE +.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +.\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" Portions of this text are reprinted and reproduced in electronic form +.\" from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- +.\" Portable Operating System Interface (POSIX), The Open Group Base +.\" Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of +.\" Electrical and Electronics Engineers, Inc and The Open Group. In the +.\" event of any discrepancy between this version and the original IEEE and +.\" The Open Group Standard, the original IEEE and The Open Group Standard is +.\" the referee document. The original Standard can be obtained online at +.\" http://www.opengroup.org/unix/online.html. +.\" +.\" $FreeBSD$ +.\" +.Dd March 3, 2008 +.Dt SEM_TIMEDWAIT 3 +.Os +.Sh NAME +.Nm sem_timedwait +.Nd "lock a semaphore" +.Sh LIBRARY +.Lb POSIX Threads Library (libpthread, -lpthread) +.Sh SYNOPSIS +.In semaphore.h +.Ft int +.Fn sem_timedwait "sem_t *sem, const struct timespec *abs_timeout" +.Sh DESCRIPTION +The +.Fn sem_timedwait +function locks the semaphore referenced by +.Fa sem , +as in the +.Fn sem_wait function . +However, if the semaphore cannot be locked without waiting for +another process or thread to unlock the semaphore by performing +a +.Fn sem_post +function, this wait will be terminated when the specified timeout expires. +.Pp +The timeout will expire when the absolute time specified by +.Fa abs_timeout +passes, as measured by the clock on which timeouts are based (that is, +when the value of that clock equals or exceeds abs_timeout), or if the +absolute time specified by +.Fa abs_timeout +has already been passed at the time of the call. +.Pp +Note that the timeout is based on the CLOCK_REALTIME clock. +.Pp +The validity of the +.Fa abs_timeout +is checked if the semaphore can be locked immediately. +.Sh RETURN VALUES +The +.Fn sem_timedwait +function returns zero if the calling process successfully performed the +semaphore lock operation on the semaphore designated by +.Fa sem . +If the call was unsuccessful, the state of the semaphore is unchanged, +and the function returns a value of -1 and set errno to indicate the error. +.Rv -std +.Sh ERRORS +The +.Fn sem_timedwait +function will fail if: +.Bl -tag -width Er +.It Bq Er EINVAL +The process or thread would have blocked, and the +.Fa abs_timeout +parameter specified a nanoseconds field value less than zero or greater than +or equal to 1000 million. +.It Bq Er ETIMEDOUT +The semaphore could not be locked before the specified timeout expired. + +The +.Fn sem_timedwait +function may fail if: +.It Bq Er EDEADLK +A deadlock condition was detected. +.It Bq Er EINTR +A signal interrupted this function. +.It Bq Er EINVAL +The +.Fa sem +argument does not refer to a valid semaphore. +.El +.Sh SEE ALSO +.Xr sem_post 3 , +.Xr sem_trywait 3 , +.Xr sem_wait 3 , +.Xr semctl 2 , +.Xr semget 2 , +.Xr semop 2 , +.Sh STANDARDS +The +.Fn sem_timedwait +function conforms to +.St -p1003.1-2004 . +.Sh HISTORY +The function first appeared in +.Fx 5.0 . +.Sh COPYRIGHT +Portions of this text are reprinted and reproduced in electronic form +from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- +Portable Operating System Interface (POSIX), The Open Group Base +Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of +Electrical and Electronics Engineers, Inc and The Open Group. In the +event of any discrepancy between this version and the original IEEE and +The Open Group Standard, the original IEEE and The Open Group Standard is +the referee document. The original Standard can be obtained online at + http://www.opengroup.org/unix/online.html.