]> git.ipfire.org Git - thirdparty/glibc.git/blame - nptl/pthread_mutex_destroy.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / nptl / pthread_mutex_destroy.c
CommitLineData
04277e02 1/* Copyright (C) 2002-2019 Free Software Foundation, Inc.
76a50749
UD
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
76a50749 18
f6c93bd9 19#include <errno.h>
76a50749
UD
20#include "pthreadP.h"
21
5acf7263
RM
22#include <stap-probe.h>
23
76a50749
UD
24
25int
9d46370c 26__pthread_mutex_destroy (pthread_mutex_t *mutex)
76a50749 27{
5acf7263
RM
28 LIBC_PROBE (mutex_destroy, 1, mutex);
29
403b4feb
SL
30 /* See concurrency notes regarding __kind in struct __pthread_mutex_s
31 in sysdeps/nptl/bits/thread-shared-types.h. */
32 if ((atomic_load_relaxed (&(mutex->__data.__kind))
33 & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
0f6699ea
UD
34 && mutex->__data.__nusers != 0)
35 return EBUSY;
f6c93bd9 36
403b4feb
SL
37 /* Set to an invalid value. Relaxed MO is enough as it is undefined behavior
38 if the mutex is used after it has been destroyed. But you can reinitialize
39 it with pthread_mutex_init. */
40 atomic_store_relaxed (&(mutex->__data.__kind), -1);
dcc73a8d 41
76a50749
UD
42 return 0;
43}
fa872e1b 44weak_alias (__pthread_mutex_destroy, pthread_mutex_destroy)
4d17e683 45hidden_def (__pthread_mutex_destroy)