Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1046)

Side by Side Diff: nss/lib/ckfw/mutex.c

Issue 1843333003: Update NSPR to 4.12 and NSS to 3.23 on iOS (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* This Source Code Form is subject to the terms of the Mozilla Public 1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 4
5 /* 5 /*
6 * mutex.c 6 * mutex.c
7 * 7 *
8 * This file implements a mutual-exclusion locking facility for Modules 8 * This file implements a mutual-exclusion locking facility for Modules
9 * using the NSS Cryptoki Framework. 9 * using the NSS Cryptoki Framework.
10 */ 10 */
(...skipping 13 matching lines...) Expand all
24 * nssCKFWMutex_Destroy 24 * nssCKFWMutex_Destroy
25 * nssCKFWMutex_Lock 25 * nssCKFWMutex_Lock
26 * nssCKFWMutex_Unlock 26 * nssCKFWMutex_Unlock
27 * 27 *
28 * -- debugging versions only -- 28 * -- debugging versions only --
29 * nssCKFWMutex_verifyPointer 29 * nssCKFWMutex_verifyPointer
30 * 30 *
31 */ 31 */
32 32
33 struct NSSCKFWMutexStr { 33 struct NSSCKFWMutexStr {
34 PRLock *lock; 34 PRLock *lock;
35 }; 35 };
36 36
37 #ifdef DEBUG 37 #ifdef DEBUG
38 /* 38 /*
39 * But first, the pointer-tracking stuff. 39 * But first, the pointer-tracking stuff.
40 * 40 *
41 * NOTE: the pointer-tracking support in NSS/base currently relies 41 * NOTE: the pointer-tracking support in NSS/base currently relies
42 * upon NSPR's CallOnce support. That, however, relies upon NSPR's 42 * upon NSPR's CallOnce support. That, however, relies upon NSPR's
43 * locking, which is tied into the runtime. We need a pointer-tracker 43 * locking, which is tied into the runtime. We need a pointer-tracker
44 * implementation that uses the locks supplied through C_Initialize. 44 * implementation that uses the locks supplied through C_Initialize.
45 * That support, however, can be filled in later. So for now, I'll 45 * That support, however, can be filled in later. So for now, I'll
46 * just do this routines as no-ops. 46 * just do this routines as no-ops.
47 */ 47 */
48 48
49 static CK_RV 49 static CK_RV
50 mutex_add_pointer 50 mutex_add_pointer(
51 ( 51 const NSSCKFWMutex *fwMutex)
52 const NSSCKFWMutex *fwMutex
53 )
54 { 52 {
55 return CKR_OK; 53 return CKR_OK;
56 } 54 }
57 55
58 static CK_RV 56 static CK_RV
59 mutex_remove_pointer 57 mutex_remove_pointer(
60 ( 58 const NSSCKFWMutex *fwMutex)
61 const NSSCKFWMutex *fwMutex
62 )
63 { 59 {
64 return CKR_OK; 60 return CKR_OK;
65 } 61 }
66 62
67 NSS_IMPLEMENT CK_RV 63 NSS_IMPLEMENT CK_RV
68 nssCKFWMutex_verifyPointer 64 nssCKFWMutex_verifyPointer(
69 ( 65 const NSSCKFWMutex *fwMutex)
70 const NSSCKFWMutex *fwMutex
71 )
72 { 66 {
73 return CKR_OK; 67 return CKR_OK;
74 } 68 }
75 69
76 #endif /* DEBUG */ 70 #endif /* DEBUG */
77 71
78 /* 72 /*
79 * nssCKFWMutex_Create 73 * nssCKFWMutex_Create
80 * 74 *
81 */ 75 */
82 NSS_EXTERN NSSCKFWMutex * 76 NSS_EXTERN NSSCKFWMutex *
83 nssCKFWMutex_Create 77 nssCKFWMutex_Create(
84 ( 78 CK_C_INITIALIZE_ARGS_PTR pInitArgs,
85 CK_C_INITIALIZE_ARGS_PTR pInitArgs, 79 CryptokiLockingState LockingState,
86 CryptokiLockingState LockingState, 80 NSSArena *arena,
87 NSSArena *arena, 81 CK_RV *pError)
88 CK_RV *pError
89 )
90 { 82 {
91 NSSCKFWMutex *mutex; 83 NSSCKFWMutex *mutex;
92 84
93 mutex = nss_ZNEW(arena, NSSCKFWMutex); 85 mutex = nss_ZNEW(arena, NSSCKFWMutex);
94 if (!mutex) { 86 if (!mutex) {
95 *pError = CKR_HOST_MEMORY; 87 *pError = CKR_HOST_MEMORY;
96 return (NSSCKFWMutex *)NULL; 88 return (NSSCKFWMutex *)NULL;
97 }
98 *pError = CKR_OK;
99 mutex->lock = NULL;
100 if (LockingState == MultiThreaded) {
101 mutex->lock = PR_NewLock();
102 if (!mutex->lock) {
103 *pError = CKR_HOST_MEMORY; /* we couldn't get the resource */
104 } 89 }
105 } 90 *pError = CKR_OK;
106 91 mutex->lock = NULL;
107 if( CKR_OK != *pError ) { 92 if (LockingState == MultiThreaded) {
108 (void)nss_ZFreeIf(mutex); 93 mutex->lock = PR_NewLock();
109 return (NSSCKFWMutex *)NULL; 94 if (!mutex->lock) {
110 } 95 *pError = CKR_HOST_MEMORY; /* we couldn't get the resource */
96 }
97 }
98
99 if (CKR_OK != *pError) {
100 (void)nss_ZFreeIf(mutex);
101 return (NSSCKFWMutex *)NULL;
102 }
111 103
112 #ifdef DEBUG 104 #ifdef DEBUG
113 *pError = mutex_add_pointer(mutex); 105 *pError = mutex_add_pointer(mutex);
114 if( CKR_OK != *pError ) { 106 if (CKR_OK != *pError) {
115 if (mutex->lock) { 107 if (mutex->lock) {
116 PR_DestroyLock(mutex->lock); 108 PR_DestroyLock(mutex->lock);
109 }
110 (void)nss_ZFreeIf(mutex);
111 return (NSSCKFWMutex *)NULL;
117 } 112 }
118 (void)nss_ZFreeIf(mutex);
119 return (NSSCKFWMutex *)NULL;
120 }
121 #endif /* DEBUG */ 113 #endif /* DEBUG */
122 114
123 return mutex; 115 return mutex;
124 } 116 }
125 117
126 /* 118 /*
127 * nssCKFWMutex_Destroy 119 * nssCKFWMutex_Destroy
128 * 120 *
129 */ 121 */
130 NSS_EXTERN CK_RV 122 NSS_EXTERN CK_RV
131 nssCKFWMutex_Destroy 123 nssCKFWMutex_Destroy(
132 ( 124 NSSCKFWMutex *mutex)
133 NSSCKFWMutex *mutex
134 )
135 { 125 {
136 CK_RV rv = CKR_OK; 126 CK_RV rv = CKR_OK;
137 127
138 #ifdef NSSDEBUG 128 #ifdef NSSDEBUG
139 rv = nssCKFWMutex_verifyPointer(mutex); 129 rv = nssCKFWMutex_verifyPointer(mutex);
140 if( CKR_OK != rv ) { 130 if (CKR_OK != rv) {
141 return rv; 131 return rv;
142 } 132 }
143 #endif /* NSSDEBUG */ 133 #endif /* NSSDEBUG */
144 134
145 if (mutex->lock) { 135 if (mutex->lock) {
146 PR_DestroyLock(mutex->lock); 136 PR_DestroyLock(mutex->lock);
147 } 137 }
148 138
149 #ifdef DEBUG 139 #ifdef DEBUG
150 (void)mutex_remove_pointer(mutex); 140 (void)mutex_remove_pointer(mutex);
151 #endif /* DEBUG */ 141 #endif /* DEBUG */
152 142
153 (void)nss_ZFreeIf(mutex); 143 (void)nss_ZFreeIf(mutex);
154 return rv; 144 return rv;
155 } 145 }
156 146
157 /* 147 /*
158 * nssCKFWMutex_Lock 148 * nssCKFWMutex_Lock
159 * 149 *
160 */ 150 */
161 NSS_EXTERN CK_RV 151 NSS_EXTERN CK_RV
162 nssCKFWMutex_Lock 152 nssCKFWMutex_Lock(
163 ( 153 NSSCKFWMutex *mutex)
164 NSSCKFWMutex *mutex
165 )
166 { 154 {
167 #ifdef NSSDEBUG 155 #ifdef NSSDEBUG
168 CK_RV rv = nssCKFWMutex_verifyPointer(mutex); 156 CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
169 if( CKR_OK != rv ) { 157 if (CKR_OK != rv) {
170 return rv; 158 return rv;
171 } 159 }
172 #endif /* NSSDEBUG */ 160 #endif /* NSSDEBUG */
173 if (mutex->lock) { 161 if (mutex->lock) {
174 PR_Lock(mutex->lock); 162 PR_Lock(mutex->lock);
175 } 163 }
176 164
177 return CKR_OK; 165 return CKR_OK;
178 } 166 }
179 167
180 /* 168 /*
181 * nssCKFWMutex_Unlock 169 * nssCKFWMutex_Unlock
182 * 170 *
183 */ 171 */
184 NSS_EXTERN CK_RV 172 NSS_EXTERN CK_RV
185 nssCKFWMutex_Unlock 173 nssCKFWMutex_Unlock(
186 ( 174 NSSCKFWMutex *mutex)
187 NSSCKFWMutex *mutex
188 )
189 { 175 {
190 PRStatus nrv; 176 PRStatus nrv;
191 #ifdef NSSDEBUG 177 #ifdef NSSDEBUG
192 CK_RV rv = nssCKFWMutex_verifyPointer(mutex); 178 CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
193 179
194 if( CKR_OK != rv ) { 180 if (CKR_OK != rv) {
195 return rv; 181 return rv;
196 } 182 }
197 #endif /* NSSDEBUG */ 183 #endif /* NSSDEBUG */
198 184
199 if (!mutex->lock) 185 if (!mutex->lock)
200 return CKR_OK; 186 return CKR_OK;
201 187
202 nrv = PR_Unlock(mutex->lock); 188 nrv = PR_Unlock(mutex->lock);
203 189
204 /* if unlock fails, either we have a programming error, or we have 190 /* if unlock fails, either we have a programming error, or we have
205 * some sort of hardware failure... in either case return CKR_DEVICE_ERROR. 191 * some sort of hardware failure... in either case return CKR_DEVICE_ERROR.
206 */ 192 */
207 return nrv == PR_SUCCESS ? CKR_OK : CKR_DEVICE_ERROR; 193 return nrv == PR_SUCCESS ? CKR_OK : CKR_DEVICE_ERROR;
208 } 194 }
209 195
210 /* 196 /*
211 * NSSCKFWMutex_Destroy 197 * NSSCKFWMutex_Destroy
212 * 198 *
213 */ 199 */
214 NSS_EXTERN CK_RV 200 NSS_EXTERN CK_RV
215 NSSCKFWMutex_Destroy 201 NSSCKFWMutex_Destroy(
216 ( 202 NSSCKFWMutex *mutex)
217 NSSCKFWMutex *mutex
218 )
219 { 203 {
220 #ifdef DEBUG 204 #ifdef DEBUG
221 CK_RV rv = nssCKFWMutex_verifyPointer(mutex); 205 CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
222 if( CKR_OK != rv ) { 206 if (CKR_OK != rv) {
223 return rv; 207 return rv;
224 } 208 }
225 #endif /* DEBUG */ 209 #endif /* DEBUG */
226 210
227 return nssCKFWMutex_Destroy(mutex); 211 return nssCKFWMutex_Destroy(mutex);
228 } 212 }
229 213
230 /* 214 /*
231 * NSSCKFWMutex_Lock 215 * NSSCKFWMutex_Lock
232 * 216 *
233 */ 217 */
234 NSS_EXTERN CK_RV 218 NSS_EXTERN CK_RV
235 NSSCKFWMutex_Lock 219 NSSCKFWMutex_Lock(
236 ( 220 NSSCKFWMutex *mutex)
237 NSSCKFWMutex *mutex
238 )
239 { 221 {
240 #ifdef DEBUG 222 #ifdef DEBUG
241 CK_RV rv = nssCKFWMutex_verifyPointer(mutex); 223 CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
242 if( CKR_OK != rv ) { 224 if (CKR_OK != rv) {
243 return rv; 225 return rv;
244 } 226 }
245 #endif /* DEBUG */ 227 #endif /* DEBUG */
246 228
247 return nssCKFWMutex_Lock(mutex); 229 return nssCKFWMutex_Lock(mutex);
248 } 230 }
249 231
250 /* 232 /*
251 * NSSCKFWMutex_Unlock 233 * NSSCKFWMutex_Unlock
252 * 234 *
253 */ 235 */
254 NSS_EXTERN CK_RV 236 NSS_EXTERN CK_RV
255 NSSCKFWMutex_Unlock 237 NSSCKFWMutex_Unlock(
256 ( 238 NSSCKFWMutex *mutex)
257 NSSCKFWMutex *mutex
258 )
259 { 239 {
260 #ifdef DEBUG 240 #ifdef DEBUG
261 CK_RV rv = nssCKFWMutex_verifyPointer(mutex); 241 CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
262 if( CKR_OK != rv ) { 242 if (CKR_OK != rv) {
263 return rv; 243 return rv;
264 } 244 }
265 #endif /* DEBUG */ 245 #endif /* DEBUG */
266 246
267 return nssCKFWMutex_Unlock(mutex); 247 return nssCKFWMutex_Unlock(mutex);
268 } 248 }
269
OLDNEW
« no previous file with comments | « nss/lib/ckfw/mechanism.c ('k') | nss/lib/ckfw/nssckfw.h » ('j') | nss/lib/util/secoid.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698