.\" Copyright (c) 2017, Yubin Ruan <ablacktshirt@gmail.com>
.\" and Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.TH PTHREAD_MUTEX_CONSISTENT 3 2017-08-20 "Linux" "Linux Programmer's Manual"
.SH NAME
pthread_mutex_consistent \- make a robust mutex consistent
.SH SYNOPSIS
.nf
.B #include <pthread.h>
.PP
.BI "int pthread_mutex_consistent(pthread_mutex_t *" mutex ");"
.fi
.PP
Compile and link with \fI\-pthread\fP.
.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
.PP
.BR pthread_mutex_consistent ():
.br
.RS 4
.ad l
_POSIX_C_SOURCE >= 200809L
.RE
.ad
.SH DESCRIPTION
This function makes a robust mutex consistent if it is in an inconsistent
state.
A mutex can be left in an inconsistent state if its owner terminates
while holding the mutex, in which case the next owner who acquires the
mutex will succeed and be notified by a return value of
.BR EOWNERDEAD
from a call to
.BR pthread_mutex_lock ().
.SH RETURN VALUE
On success,
.IR pthread_mutex_consistent ()
returns 0.
Otherwise,
it returns a positive error number to indicate the cause of the error.
.SH ERRORS
.TP
.B EINVAL
The mutex is either not robust or is not in an inconsistent state.
.SH VERSIONS
.BR pthread_mutex_consistent ()
was added to glibc in version 2.12.
.SH CONFORMING TO
POSIX.1-2008.
.SH NOTES
.BR pthread_mutex_consistent ()
simply informs the implementation that the state (shared data)
guarded by the mutex has been restored to a consistent state and that
normal operations can now be performed with the mutex.
It is the application's responsibility to ensure that the
shared data has been restored to a consistent state before calling
.BR pthread_mutex_consistent ().
.PP
Before the addition of
.BR pthread_mutex_consistent ()
to POSIX,
glibc defined the following equivalent nonstandard function if
.BR _GNU_SOURCE
was defined:
.PP
.nf
.BI "int pthread_mutex_consistent(const pthread_mutex_t *" mutex );
.fi
.PP
This GNU-specific API, which first appeared in glibc 2.4,
is nowadays obsolete and should not be used in new programs.
.SH EXAMPLE
See
.BR pthread_mutexattr_setrobust (3).
.SH SEE ALSO
.ad l
.nh
.BR pthread_mutexattr_init (3),
.BR pthread_mutex_lock (3),
.BR pthread_mutexattr_setrobust (3),
.BR pthread_mutexattr_getrobust (3),
.BR pthreads (7)
