Warning: That file was not part of the compilation database. It may have many parsing errors.

1/* Copyright (C) 1994-2019 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
17
18#ifndef _LOCK_INTERN_H
19#define _LOCK_INTERN_H
20
21#include <sys/cdefs.h>
22#if defined __USE_EXTERN_INLINES && defined _LIBC
23# include <lowlevellock.h>
24#endif
25
26#ifndef _EXTERN_INLINE
27#define _EXTERN_INLINE __extern_inline
28#endif
29
30/* The type of a spin lock variable. */
31typedef unsigned int __spin_lock_t;
32
33/* Static initializer for spinlocks. */
34#define __SPIN_LOCK_INITIALIZER LLL_INITIALIZER
35
36/* Initialize LOCK. */
37
38extern void __spin_lock_init (__spin_lock_t *__lock);
39
40#if defined __USE_EXTERN_INLINES && defined _LIBC
41_EXTERN_INLINE void
42__spin_lock_init (__spin_lock_t *__lock)
43{
44 *__lock = __SPIN_LOCK_INITIALIZER;
45}
46#endif
47
48
49/* Lock LOCK, blocking if we can't get it. */
50extern void __spin_lock_solid (__spin_lock_t *__lock);
51
52/* Lock the spin lock LOCK. */
53
54extern void __spin_lock (__spin_lock_t *__lock);
55
56#if defined __USE_EXTERN_INLINES && defined _LIBC
57_EXTERN_INLINE void
58__spin_lock (__spin_lock_t *__lock)
59{
60 lll_lock (__lock, 0);
61}
62#endif
63
64/* Unlock LOCK. */
65extern void __spin_unlock (__spin_lock_t *__lock);
66
67#if defined __USE_EXTERN_INLINES && defined _LIBC
68_EXTERN_INLINE void
69__spin_unlock (__spin_lock_t *__lock)
70{
71 lll_unlock (__lock, 0);
72}
73#endif
74
75/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */
76extern int __spin_try_lock (__spin_lock_t *__lock);
77
78#if defined __USE_EXTERN_INLINES && defined _LIBC
79_EXTERN_INLINE int
80__spin_try_lock (__spin_lock_t *__lock)
81{
82 return (lll_trylock (__lock) == 0);
83}
84#endif
85
86/* Return nonzero if LOCK is locked. */
87extern int __spin_lock_locked (__spin_lock_t *__lock);
88
89#if defined __USE_EXTERN_INLINES && defined _LIBC
90_EXTERN_INLINE int
91__spin_lock_locked (__spin_lock_t *__lock)
92{
93 return (*(volatile __spin_lock_t *)__lock != 0);
94}
95#endif
96
97/* Name space-clean internal interface to mutex locks. */
98
99/* Initialize the newly allocated mutex lock LOCK for further use. */
100extern void __mutex_init (void *__lock);
101
102/* Lock the mutex lock LOCK. */
103
104extern void __mutex_lock (void *__lock);
105
106#if defined __USE_EXTERN_INLINES && defined _LIBC
107_EXTERN_INLINE void
108__mutex_lock (void *__lock)
109{
110 __spin_lock ((__spin_lock_t *)__lock);
111}
112#endif
113
114/* Unlock the mutex lock LOCK. */
115
116extern void __mutex_unlock (void *__lock);
117
118#if defined __USE_EXTERN_INLINES && defined _LIBC
119_EXTERN_INLINE void
120__mutex_unlock (void *__lock)
121{
122 __spin_unlock ((__spin_lock_t *)__lock);
123}
124#endif
125
126
127extern int __mutex_trylock (void *__lock);
128
129#if defined __USE_EXTERN_INLINES && defined _LIBC
130_EXTERN_INLINE int
131__mutex_trylock (void *__lock)
132{
133 return (__spin_try_lock ((__spin_lock_t *)__lock));
134}
135#endif
136
137#endif /* lock-intern.h */
138

Warning: That file was not part of the compilation database. It may have many parsing errors.