1 .\"
   2 .\" This file and its contents are supplied under the terms of the
   3 .\" Common Development and Distribution License ("CDDL"), version 1.0.
   4 .\" You may only use this file in accordance with the terms of version
   5 .\" 1.0 of the CDDL.
   6 .\"
   7 .\" A full copy of the text of the CDDL should have accompanied this
   8 .\" source.  A copy of the CDDL is also available via the Internet at
   9 .\" http://www.illumos.org/license/CDDL.
  10 .\"
  11 .\"
  12 .\" Copyright (c) 2014, Joyent, Inc.
  13 .\"
  14 .Dd "Aug 20, 2019"
  15 .Dt PTHREAD_MUTEXATTR_GETROBUST 3C
  16 .Os
  17 .Sh NAME
  18 .Nm pthread_mutexattr_getrobust ,
  19 .Nm pthread_mutexattr_setrobust
  20 .Nd get and set the mutex robust attribute
  21 .Sh SYNOPSIS
  22 .In pthread.h
  23 .Ft int
  24 .Fo pthread_mutexattr_getrobust
  25 .Fa "const pthread_mutexattr_t *attr"
  26 .Fa "int *robust"
  27 .Fc
  28 .Ft int
  29 .Fo pthread_mutexattr_setrobust
  30 .Fa "pthread_mutexattr_t *attr"
  31 .Fa "int robust"
  32 .Fc
  33 .Sh DESCRIPTION
  34 The
  35 .Fn pthread_mutexattr_getrobust
  36 and
  37 .Fn pthread_mtuexattr_setrobust
  38 functions obtain and set a mutex's
  39 .Em robust
  40 attribute, putting it in, or obtaining it from
  41 .Va robust .
  42 The valid values for
  43 .Va robust
  44 include:
  45 .Bl -tag -width Dv
  46 .It Sy PTHREAD_MUTEX_STALLED
  47 The mutex referred to by
  48 .Va attr
  49 is a traditional mutex.
  50 When a thread holding an intra-process lock or a process holding an
  51 inter-process lock crashes or terminates without unlocking the mutex, then the
  52 lock will be
  53 .Sy stalled .
  54 For another thread or process to obtain the lock, something else must
  55 unlock it.
  56 .It Sy PTHREAD_MUTEX_ROBUST
  57 The mutex referred to by
  58 .Va attr
  59 is considered a robust mutex.
  60 When a process holding an inter-process lock crashes or terminates without
  61 unlocking the mutex, the attempt to lock it will return
  62 .Er EOWNERDEAD .
  63 This allows the new owner the chance to fix the internal state and call
  64 .Xr pthread_mutex_consistent 3C
  65 prior to unlocking the lock, allowing normal operation to proceed.
  66 Any crashes while in this state cause the next owner to obtain
  67 .Er EOWNERDEAD .
  68 .El
  69 .Sh RETURN VALUES
  70 Upon successful completion, the
  71 .Fn pthread_mutexattr_getrobust
  72 function will return
  73 .Sy 0
  74 and update
  75 .Fa robust
  76 with the current value of the robust attribute.
  77 Upon successful completion, the
  78 .Fn pthread_mutexattr_setrobust
  79 function will return
  80 .Sy 0
  81 and update the robust property of the attributes pointed to by
  82 .Va attr
  83 to
  84 .Va robust .
  85 If either function fails, an error code will be returned to indicate the
  86 error.
  87 Valid errors are defined below.
  88 .Sh ERRORS
  89 The
  90 .Fn pthread_mutexattr_getrobust
  91 function will fail if:
  92 .Bl -tag -width Er
  93 .It Er EINVAL
  94 .Va attr
  95 is invalid or a null pointer,
  96 .Va robust
  97 is a null pointer.
  98 .El
  99 .Lp
 100 The
 101 .Fn pthread_mutexattr_setrobust
 102 function will fail if:
 103 .Bl -tag -width Er
 104 .It Er EINVAL
 105 .Va attr
 106 is invalid or a null pointer,
 107 .Va robust
 108 is not one of
 109 .Sy PTHREAD_MUTEX_STALLED
 110 or
 111 .Sy PTHREAD_MUTEX_ROBUST .
 112 .El
 113 .Sh INTERFACE STABILITY
 114 .Sy Committed
 115 .Sh MT-LEVEL
 116 .Sy MT-Safe
 117 .Sh SEE ALSO
 118 .Xr pthread_mutex_consistent 3C ,
 119 .Xr pthread 3HEAD ,
 120 .Xr libpthread 3LIB ,
 121 .Xr attributes 5 ,
 122 .Xr mutex 5