Prefer https to http for gnu.org and fsf.org URLs
[platform/upstream/glibc.git] / sysdeps / htl / pt-key-delete.c
1 /* pthread_key_delete.  Hurd version.
2    Copyright (C) 2002-2019 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
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
16    License along with the GNU C Library;  if not, see
17    <https://www.gnu.org/licenses/>.  */
18
19 #include <pthread.h>
20
21 #include <pt-internal.h>
22
23 int
24 pthread_key_delete (pthread_key_t key)
25 {
26   error_t err = 0;
27
28   __pthread_key_lock_ready ();
29
30   __pthread_mutex_lock (&__pthread_key_lock);
31
32   if (key < 0 || key >= __pthread_key_count
33       || __pthread_key_destructors[key] == PTHREAD_KEY_INVALID)
34     err = EINVAL;
35   else
36     {
37       int i;
38
39       __pthread_key_destructors[key] = PTHREAD_KEY_INVALID;
40       __pthread_key_invalid_count++;
41
42       __pthread_rwlock_rdlock (&__pthread_threads_lock);
43       for (i = 0; i < __pthread_num_threads; ++i)
44         {
45           struct __pthread *t;
46
47           t = __pthread_threads[i];
48
49           if (t == NULL)
50             continue;
51
52           /* Just remove the key, no need to care whether it was
53              already there. */
54           if (key < t->thread_specifics_size)
55             t->thread_specifics[key] = 0;
56         }
57       __pthread_rwlock_unlock (&__pthread_threads_lock);
58     }
59
60   __pthread_mutex_unlock (&__pthread_key_lock);
61
62   return err;
63 }