1 krisbash 1.1 /*
2 **==============================================================================
3 **
4 ** Open Management Infrastructure (OMI)
5 **
6 ** Copyright (c) Microsoft Corporation
7 **
8 ** Licensed under the Apache License, Version 2.0 (the "License"); you may not
9 ** use this file except in compliance with the License. You may obtain a copy
10 ** of the License at
11 **
12 ** http://www.apache.org/licenses/LICENSE-2.0
13 **
14 ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
16 ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
17 ** MERCHANTABLITY OR NON-INFRINGEMENT.
18 **
19 ** See the Apache 2 License for the specific language governing permissions
20 ** and limitations under the License.
21 **
22 krisbash 1.1 **==============================================================================
23 */
24
25 #include "lock.h"
26 #include <pthread.h>
27 #include <unistd.h>
28 #include <errno.h>
29
30 /*
31 **==============================================================================
32 **
33 ** Local definitions:
34 **
35 **==============================================================================
36 */
37
38 #define CONDLOCKENTRY_INITIALIZER \
39 { PTHREAD_COND_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0, 0, 0 }
40
41 typedef struct _CondLockSlot
42 {
43 krisbash 1.1 /* Condition variable */
44 pthread_cond_t cond;
45
46 /* Mutex used to synchronize the condition */
47 pthread_mutex_t mutex;
48
49 /* The key of the last waiter for this slot */
50 ptrdiff_t key;
51
52 /* Number of threads waiting on this condition */
53 size_t waiters;
54
55 /* Non-zero if there has been a collision */
56 unsigned int collision;
57 }
58 CondLockSlot;
59
60 #if defined(CONFIG_FAVORSIZE)
61 # define CONDLOCK_NUMSLOTS 16
62 #else
63 # define CONDLOCK_NUMSLOTS 1024
64 krisbash 1.1 #endif
65
66 static CondLockSlot _slots[CONDLOCK_NUMSLOTS] =
67 {
68 #if defined(CONFIG_FAVORSIZE)
69 CONDLOCKENTRY_INITIALIZER,
70 CONDLOCKENTRY_INITIALIZER,
71 CONDLOCKENTRY_INITIALIZER,
72 CONDLOCKENTRY_INITIALIZER,
73 CONDLOCKENTRY_INITIALIZER,
74 CONDLOCKENTRY_INITIALIZER,
75 CONDLOCKENTRY_INITIALIZER,
76 CONDLOCKENTRY_INITIALIZER,
77 CONDLOCKENTRY_INITIALIZER,
78 CONDLOCKENTRY_INITIALIZER,
79 CONDLOCKENTRY_INITIALIZER,
80 CONDLOCKENTRY_INITIALIZER,
81 CONDLOCKENTRY_INITIALIZER,
82 CONDLOCKENTRY_INITIALIZER,
83 CONDLOCKENTRY_INITIALIZER,
84 CONDLOCKENTRY_INITIALIZER
85 krisbash 1.1 #else /* defined(CONFIG_FAVORSIZE) */
86 CONDLOCKENTRY_INITIALIZER,
87 CONDLOCKENTRY_INITIALIZER,
88 CONDLOCKENTRY_INITIALIZER,
89 CONDLOCKENTRY_INITIALIZER,
90 CONDLOCKENTRY_INITIALIZER,
91 CONDLOCKENTRY_INITIALIZER,
92 CONDLOCKENTRY_INITIALIZER,
93 CONDLOCKENTRY_INITIALIZER,
94 CONDLOCKENTRY_INITIALIZER,
95 CONDLOCKENTRY_INITIALIZER,
96 CONDLOCKENTRY_INITIALIZER,
97 CONDLOCKENTRY_INITIALIZER,
98 CONDLOCKENTRY_INITIALIZER,
99 CONDLOCKENTRY_INITIALIZER,
100 CONDLOCKENTRY_INITIALIZER,
101 CONDLOCKENTRY_INITIALIZER,
102 CONDLOCKENTRY_INITIALIZER,
103 CONDLOCKENTRY_INITIALIZER,
104 CONDLOCKENTRY_INITIALIZER,
105 CONDLOCKENTRY_INITIALIZER,
106 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
107 CONDLOCKENTRY_INITIALIZER,
108 CONDLOCKENTRY_INITIALIZER,
109 CONDLOCKENTRY_INITIALIZER,
110 CONDLOCKENTRY_INITIALIZER,
111 CONDLOCKENTRY_INITIALIZER,
112 CONDLOCKENTRY_INITIALIZER,
113 CONDLOCKENTRY_INITIALIZER,
114 CONDLOCKENTRY_INITIALIZER,
115 CONDLOCKENTRY_INITIALIZER,
116 CONDLOCKENTRY_INITIALIZER,
117 CONDLOCKENTRY_INITIALIZER,
118 CONDLOCKENTRY_INITIALIZER,
119 CONDLOCKENTRY_INITIALIZER,
120 CONDLOCKENTRY_INITIALIZER,
121 CONDLOCKENTRY_INITIALIZER,
122 CONDLOCKENTRY_INITIALIZER,
123 CONDLOCKENTRY_INITIALIZER,
124 CONDLOCKENTRY_INITIALIZER,
125 CONDLOCKENTRY_INITIALIZER,
126 CONDLOCKENTRY_INITIALIZER,
127 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
128 CONDLOCKENTRY_INITIALIZER,
129 CONDLOCKENTRY_INITIALIZER,
130 CONDLOCKENTRY_INITIALIZER,
131 CONDLOCKENTRY_INITIALIZER,
132 CONDLOCKENTRY_INITIALIZER,
133 CONDLOCKENTRY_INITIALIZER,
134 CONDLOCKENTRY_INITIALIZER,
135 CONDLOCKENTRY_INITIALIZER,
136 CONDLOCKENTRY_INITIALIZER,
137 CONDLOCKENTRY_INITIALIZER,
138 CONDLOCKENTRY_INITIALIZER,
139 CONDLOCKENTRY_INITIALIZER,
140 CONDLOCKENTRY_INITIALIZER,
141 CONDLOCKENTRY_INITIALIZER,
142 CONDLOCKENTRY_INITIALIZER,
143 CONDLOCKENTRY_INITIALIZER,
144 CONDLOCKENTRY_INITIALIZER,
145 CONDLOCKENTRY_INITIALIZER,
146 CONDLOCKENTRY_INITIALIZER,
147 CONDLOCKENTRY_INITIALIZER,
148 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
149 CONDLOCKENTRY_INITIALIZER,
150 CONDLOCKENTRY_INITIALIZER,
151 CONDLOCKENTRY_INITIALIZER,
152 CONDLOCKENTRY_INITIALIZER,
153 CONDLOCKENTRY_INITIALIZER,
154 CONDLOCKENTRY_INITIALIZER,
155 CONDLOCKENTRY_INITIALIZER,
156 CONDLOCKENTRY_INITIALIZER,
157 CONDLOCKENTRY_INITIALIZER,
158 CONDLOCKENTRY_INITIALIZER,
159 CONDLOCKENTRY_INITIALIZER,
160 CONDLOCKENTRY_INITIALIZER,
161 CONDLOCKENTRY_INITIALIZER,
162 CONDLOCKENTRY_INITIALIZER,
163 CONDLOCKENTRY_INITIALIZER,
164 CONDLOCKENTRY_INITIALIZER,
165 CONDLOCKENTRY_INITIALIZER,
166 CONDLOCKENTRY_INITIALIZER,
167 CONDLOCKENTRY_INITIALIZER,
168 CONDLOCKENTRY_INITIALIZER,
169 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
170 CONDLOCKENTRY_INITIALIZER,
171 CONDLOCKENTRY_INITIALIZER,
172 CONDLOCKENTRY_INITIALIZER,
173 CONDLOCKENTRY_INITIALIZER,
174 CONDLOCKENTRY_INITIALIZER,
175 CONDLOCKENTRY_INITIALIZER,
176 CONDLOCKENTRY_INITIALIZER,
177 CONDLOCKENTRY_INITIALIZER,
178 CONDLOCKENTRY_INITIALIZER,
179 CONDLOCKENTRY_INITIALIZER,
180 CONDLOCKENTRY_INITIALIZER,
181 CONDLOCKENTRY_INITIALIZER,
182 CONDLOCKENTRY_INITIALIZER,
183 CONDLOCKENTRY_INITIALIZER,
184 CONDLOCKENTRY_INITIALIZER,
185 CONDLOCKENTRY_INITIALIZER,
186 CONDLOCKENTRY_INITIALIZER,
187 CONDLOCKENTRY_INITIALIZER,
188 CONDLOCKENTRY_INITIALIZER,
189 CONDLOCKENTRY_INITIALIZER,
190 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
191 CONDLOCKENTRY_INITIALIZER,
192 CONDLOCKENTRY_INITIALIZER,
193 CONDLOCKENTRY_INITIALIZER,
194 CONDLOCKENTRY_INITIALIZER,
195 CONDLOCKENTRY_INITIALIZER,
196 CONDLOCKENTRY_INITIALIZER,
197 CONDLOCKENTRY_INITIALIZER,
198 CONDLOCKENTRY_INITIALIZER,
199 CONDLOCKENTRY_INITIALIZER,
200 CONDLOCKENTRY_INITIALIZER,
201 CONDLOCKENTRY_INITIALIZER,
202 CONDLOCKENTRY_INITIALIZER,
203 CONDLOCKENTRY_INITIALIZER,
204 CONDLOCKENTRY_INITIALIZER,
205 CONDLOCKENTRY_INITIALIZER,
206 CONDLOCKENTRY_INITIALIZER,
207 CONDLOCKENTRY_INITIALIZER,
208 CONDLOCKENTRY_INITIALIZER,
209 CONDLOCKENTRY_INITIALIZER,
210 CONDLOCKENTRY_INITIALIZER,
211 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
212 CONDLOCKENTRY_INITIALIZER,
213 CONDLOCKENTRY_INITIALIZER,
214 CONDLOCKENTRY_INITIALIZER,
215 CONDLOCKENTRY_INITIALIZER,
216 CONDLOCKENTRY_INITIALIZER,
217 CONDLOCKENTRY_INITIALIZER,
218 CONDLOCKENTRY_INITIALIZER,
219 CONDLOCKENTRY_INITIALIZER,
220 CONDLOCKENTRY_INITIALIZER,
221 CONDLOCKENTRY_INITIALIZER,
222 CONDLOCKENTRY_INITIALIZER,
223 CONDLOCKENTRY_INITIALIZER,
224 CONDLOCKENTRY_INITIALIZER,
225 CONDLOCKENTRY_INITIALIZER,
226 CONDLOCKENTRY_INITIALIZER,
227 CONDLOCKENTRY_INITIALIZER,
228 CONDLOCKENTRY_INITIALIZER,
229 CONDLOCKENTRY_INITIALIZER,
230 CONDLOCKENTRY_INITIALIZER,
231 CONDLOCKENTRY_INITIALIZER,
232 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
233 CONDLOCKENTRY_INITIALIZER,
234 CONDLOCKENTRY_INITIALIZER,
235 CONDLOCKENTRY_INITIALIZER,
236 CONDLOCKENTRY_INITIALIZER,
237 CONDLOCKENTRY_INITIALIZER,
238 CONDLOCKENTRY_INITIALIZER,
239 CONDLOCKENTRY_INITIALIZER,
240 CONDLOCKENTRY_INITIALIZER,
241 CONDLOCKENTRY_INITIALIZER,
242 CONDLOCKENTRY_INITIALIZER,
243 CONDLOCKENTRY_INITIALIZER,
244 CONDLOCKENTRY_INITIALIZER,
245 CONDLOCKENTRY_INITIALIZER,
246 CONDLOCKENTRY_INITIALIZER,
247 CONDLOCKENTRY_INITIALIZER,
248 CONDLOCKENTRY_INITIALIZER,
249 CONDLOCKENTRY_INITIALIZER,
250 CONDLOCKENTRY_INITIALIZER,
251 CONDLOCKENTRY_INITIALIZER,
252 CONDLOCKENTRY_INITIALIZER,
253 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
254 CONDLOCKENTRY_INITIALIZER,
255 CONDLOCKENTRY_INITIALIZER,
256 CONDLOCKENTRY_INITIALIZER,
257 CONDLOCKENTRY_INITIALIZER,
258 CONDLOCKENTRY_INITIALIZER,
259 CONDLOCKENTRY_INITIALIZER,
260 CONDLOCKENTRY_INITIALIZER,
261 CONDLOCKENTRY_INITIALIZER,
262 CONDLOCKENTRY_INITIALIZER,
263 CONDLOCKENTRY_INITIALIZER,
264 CONDLOCKENTRY_INITIALIZER,
265 CONDLOCKENTRY_INITIALIZER,
266 CONDLOCKENTRY_INITIALIZER,
267 CONDLOCKENTRY_INITIALIZER,
268 CONDLOCKENTRY_INITIALIZER,
269 CONDLOCKENTRY_INITIALIZER,
270 CONDLOCKENTRY_INITIALIZER,
271 CONDLOCKENTRY_INITIALIZER,
272 CONDLOCKENTRY_INITIALIZER,
273 CONDLOCKENTRY_INITIALIZER,
274 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
275 CONDLOCKENTRY_INITIALIZER,
276 CONDLOCKENTRY_INITIALIZER,
277 CONDLOCKENTRY_INITIALIZER,
278 CONDLOCKENTRY_INITIALIZER,
279 CONDLOCKENTRY_INITIALIZER,
280 CONDLOCKENTRY_INITIALIZER,
281 CONDLOCKENTRY_INITIALIZER,
282 CONDLOCKENTRY_INITIALIZER,
283 CONDLOCKENTRY_INITIALIZER,
284 CONDLOCKENTRY_INITIALIZER,
285 CONDLOCKENTRY_INITIALIZER,
286 CONDLOCKENTRY_INITIALIZER,
287 CONDLOCKENTRY_INITIALIZER,
288 CONDLOCKENTRY_INITIALIZER,
289 CONDLOCKENTRY_INITIALIZER,
290 CONDLOCKENTRY_INITIALIZER,
291 CONDLOCKENTRY_INITIALIZER,
292 CONDLOCKENTRY_INITIALIZER,
293 CONDLOCKENTRY_INITIALIZER,
294 CONDLOCKENTRY_INITIALIZER,
295 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
296 CONDLOCKENTRY_INITIALIZER,
297 CONDLOCKENTRY_INITIALIZER,
298 CONDLOCKENTRY_INITIALIZER,
299 CONDLOCKENTRY_INITIALIZER,
300 CONDLOCKENTRY_INITIALIZER,
301 CONDLOCKENTRY_INITIALIZER,
302 CONDLOCKENTRY_INITIALIZER,
303 CONDLOCKENTRY_INITIALIZER,
304 CONDLOCKENTRY_INITIALIZER,
305 CONDLOCKENTRY_INITIALIZER,
306 CONDLOCKENTRY_INITIALIZER,
307 CONDLOCKENTRY_INITIALIZER,
308 CONDLOCKENTRY_INITIALIZER,
309 CONDLOCKENTRY_INITIALIZER,
310 CONDLOCKENTRY_INITIALIZER,
311 CONDLOCKENTRY_INITIALIZER,
312 CONDLOCKENTRY_INITIALIZER,
313 CONDLOCKENTRY_INITIALIZER,
314 CONDLOCKENTRY_INITIALIZER,
315 CONDLOCKENTRY_INITIALIZER,
316 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
317 CONDLOCKENTRY_INITIALIZER,
318 CONDLOCKENTRY_INITIALIZER,
319 CONDLOCKENTRY_INITIALIZER,
320 CONDLOCKENTRY_INITIALIZER,
321 CONDLOCKENTRY_INITIALIZER,
322 CONDLOCKENTRY_INITIALIZER,
323 CONDLOCKENTRY_INITIALIZER,
324 CONDLOCKENTRY_INITIALIZER,
325 CONDLOCKENTRY_INITIALIZER,
326 CONDLOCKENTRY_INITIALIZER,
327 CONDLOCKENTRY_INITIALIZER,
328 CONDLOCKENTRY_INITIALIZER,
329 CONDLOCKENTRY_INITIALIZER,
330 CONDLOCKENTRY_INITIALIZER,
331 CONDLOCKENTRY_INITIALIZER,
332 CONDLOCKENTRY_INITIALIZER,
333 CONDLOCKENTRY_INITIALIZER,
334 CONDLOCKENTRY_INITIALIZER,
335 CONDLOCKENTRY_INITIALIZER,
336 CONDLOCKENTRY_INITIALIZER,
337 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
338 CONDLOCKENTRY_INITIALIZER,
339 CONDLOCKENTRY_INITIALIZER,
340 CONDLOCKENTRY_INITIALIZER,
341 CONDLOCKENTRY_INITIALIZER,
342 CONDLOCKENTRY_INITIALIZER,
343 CONDLOCKENTRY_INITIALIZER,
344 CONDLOCKENTRY_INITIALIZER,
345 CONDLOCKENTRY_INITIALIZER,
346 CONDLOCKENTRY_INITIALIZER,
347 CONDLOCKENTRY_INITIALIZER,
348 CONDLOCKENTRY_INITIALIZER,
349 CONDLOCKENTRY_INITIALIZER,
350 CONDLOCKENTRY_INITIALIZER,
351 CONDLOCKENTRY_INITIALIZER,
352 CONDLOCKENTRY_INITIALIZER,
353 CONDLOCKENTRY_INITIALIZER,
354 CONDLOCKENTRY_INITIALIZER,
355 CONDLOCKENTRY_INITIALIZER,
356 CONDLOCKENTRY_INITIALIZER,
357 CONDLOCKENTRY_INITIALIZER,
358 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
359 CONDLOCKENTRY_INITIALIZER,
360 CONDLOCKENTRY_INITIALIZER,
361 CONDLOCKENTRY_INITIALIZER,
362 CONDLOCKENTRY_INITIALIZER,
363 CONDLOCKENTRY_INITIALIZER,
364 CONDLOCKENTRY_INITIALIZER,
365 CONDLOCKENTRY_INITIALIZER,
366 CONDLOCKENTRY_INITIALIZER,
367 CONDLOCKENTRY_INITIALIZER,
368 CONDLOCKENTRY_INITIALIZER,
369 CONDLOCKENTRY_INITIALIZER,
370 CONDLOCKENTRY_INITIALIZER,
371 CONDLOCKENTRY_INITIALIZER,
372 CONDLOCKENTRY_INITIALIZER,
373 CONDLOCKENTRY_INITIALIZER,
374 CONDLOCKENTRY_INITIALIZER,
375 CONDLOCKENTRY_INITIALIZER,
376 CONDLOCKENTRY_INITIALIZER,
377 CONDLOCKENTRY_INITIALIZER,
378 CONDLOCKENTRY_INITIALIZER,
379 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
380 CONDLOCKENTRY_INITIALIZER,
381 CONDLOCKENTRY_INITIALIZER,
382 CONDLOCKENTRY_INITIALIZER,
383 CONDLOCKENTRY_INITIALIZER,
384 CONDLOCKENTRY_INITIALIZER,
385 CONDLOCKENTRY_INITIALIZER,
386 CONDLOCKENTRY_INITIALIZER,
387 CONDLOCKENTRY_INITIALIZER,
388 CONDLOCKENTRY_INITIALIZER,
389 CONDLOCKENTRY_INITIALIZER,
390 CONDLOCKENTRY_INITIALIZER,
391 CONDLOCKENTRY_INITIALIZER,
392 CONDLOCKENTRY_INITIALIZER,
393 CONDLOCKENTRY_INITIALIZER,
394 CONDLOCKENTRY_INITIALIZER,
395 CONDLOCKENTRY_INITIALIZER,
396 CONDLOCKENTRY_INITIALIZER,
397 CONDLOCKENTRY_INITIALIZER,
398 CONDLOCKENTRY_INITIALIZER,
399 CONDLOCKENTRY_INITIALIZER,
400 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
401 CONDLOCKENTRY_INITIALIZER,
402 CONDLOCKENTRY_INITIALIZER,
403 CONDLOCKENTRY_INITIALIZER,
404 CONDLOCKENTRY_INITIALIZER,
405 CONDLOCKENTRY_INITIALIZER,
406 CONDLOCKENTRY_INITIALIZER,
407 CONDLOCKENTRY_INITIALIZER,
408 CONDLOCKENTRY_INITIALIZER,
409 CONDLOCKENTRY_INITIALIZER,
410 CONDLOCKENTRY_INITIALIZER,
411 CONDLOCKENTRY_INITIALIZER,
412 CONDLOCKENTRY_INITIALIZER,
413 CONDLOCKENTRY_INITIALIZER,
414 CONDLOCKENTRY_INITIALIZER,
415 CONDLOCKENTRY_INITIALIZER,
416 CONDLOCKENTRY_INITIALIZER,
417 CONDLOCKENTRY_INITIALIZER,
418 CONDLOCKENTRY_INITIALIZER,
419 CONDLOCKENTRY_INITIALIZER,
420 CONDLOCKENTRY_INITIALIZER,
421 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
422 CONDLOCKENTRY_INITIALIZER,
423 CONDLOCKENTRY_INITIALIZER,
424 CONDLOCKENTRY_INITIALIZER,
425 CONDLOCKENTRY_INITIALIZER,
426 CONDLOCKENTRY_INITIALIZER,
427 CONDLOCKENTRY_INITIALIZER,
428 CONDLOCKENTRY_INITIALIZER,
429 CONDLOCKENTRY_INITIALIZER,
430 CONDLOCKENTRY_INITIALIZER,
431 CONDLOCKENTRY_INITIALIZER,
432 CONDLOCKENTRY_INITIALIZER,
433 CONDLOCKENTRY_INITIALIZER,
434 CONDLOCKENTRY_INITIALIZER,
435 CONDLOCKENTRY_INITIALIZER,
436 CONDLOCKENTRY_INITIALIZER,
437 CONDLOCKENTRY_INITIALIZER,
438 CONDLOCKENTRY_INITIALIZER,
439 CONDLOCKENTRY_INITIALIZER,
440 CONDLOCKENTRY_INITIALIZER,
441 CONDLOCKENTRY_INITIALIZER,
442 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
443 CONDLOCKENTRY_INITIALIZER,
444 CONDLOCKENTRY_INITIALIZER,
445 CONDLOCKENTRY_INITIALIZER,
446 CONDLOCKENTRY_INITIALIZER,
447 CONDLOCKENTRY_INITIALIZER,
448 CONDLOCKENTRY_INITIALIZER,
449 CONDLOCKENTRY_INITIALIZER,
450 CONDLOCKENTRY_INITIALIZER,
451 CONDLOCKENTRY_INITIALIZER,
452 CONDLOCKENTRY_INITIALIZER,
453 CONDLOCKENTRY_INITIALIZER,
454 CONDLOCKENTRY_INITIALIZER,
455 CONDLOCKENTRY_INITIALIZER,
456 CONDLOCKENTRY_INITIALIZER,
457 CONDLOCKENTRY_INITIALIZER,
458 CONDLOCKENTRY_INITIALIZER,
459 CONDLOCKENTRY_INITIALIZER,
460 CONDLOCKENTRY_INITIALIZER,
461 CONDLOCKENTRY_INITIALIZER,
462 CONDLOCKENTRY_INITIALIZER,
463 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
464 CONDLOCKENTRY_INITIALIZER,
465 CONDLOCKENTRY_INITIALIZER,
466 CONDLOCKENTRY_INITIALIZER,
467 CONDLOCKENTRY_INITIALIZER,
468 CONDLOCKENTRY_INITIALIZER,
469 CONDLOCKENTRY_INITIALIZER,
470 CONDLOCKENTRY_INITIALIZER,
471 CONDLOCKENTRY_INITIALIZER,
472 CONDLOCKENTRY_INITIALIZER,
473 CONDLOCKENTRY_INITIALIZER,
474 CONDLOCKENTRY_INITIALIZER,
475 CONDLOCKENTRY_INITIALIZER,
476 CONDLOCKENTRY_INITIALIZER,
477 CONDLOCKENTRY_INITIALIZER,
478 CONDLOCKENTRY_INITIALIZER,
479 CONDLOCKENTRY_INITIALIZER,
480 CONDLOCKENTRY_INITIALIZER,
481 CONDLOCKENTRY_INITIALIZER,
482 CONDLOCKENTRY_INITIALIZER,
483 CONDLOCKENTRY_INITIALIZER,
484 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
485 CONDLOCKENTRY_INITIALIZER,
486 CONDLOCKENTRY_INITIALIZER,
487 CONDLOCKENTRY_INITIALIZER,
488 CONDLOCKENTRY_INITIALIZER,
489 CONDLOCKENTRY_INITIALIZER,
490 CONDLOCKENTRY_INITIALIZER,
491 CONDLOCKENTRY_INITIALIZER,
492 CONDLOCKENTRY_INITIALIZER,
493 CONDLOCKENTRY_INITIALIZER,
494 CONDLOCKENTRY_INITIALIZER,
495 CONDLOCKENTRY_INITIALIZER,
496 CONDLOCKENTRY_INITIALIZER,
497 CONDLOCKENTRY_INITIALIZER,
498 CONDLOCKENTRY_INITIALIZER,
499 CONDLOCKENTRY_INITIALIZER,
500 CONDLOCKENTRY_INITIALIZER,
501 CONDLOCKENTRY_INITIALIZER,
502 CONDLOCKENTRY_INITIALIZER,
503 CONDLOCKENTRY_INITIALIZER,
504 CONDLOCKENTRY_INITIALIZER,
505 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
506 CONDLOCKENTRY_INITIALIZER,
507 CONDLOCKENTRY_INITIALIZER,
508 CONDLOCKENTRY_INITIALIZER,
509 CONDLOCKENTRY_INITIALIZER,
510 CONDLOCKENTRY_INITIALIZER,
511 CONDLOCKENTRY_INITIALIZER,
512 CONDLOCKENTRY_INITIALIZER,
513 CONDLOCKENTRY_INITIALIZER,
514 CONDLOCKENTRY_INITIALIZER,
515 CONDLOCKENTRY_INITIALIZER,
516 CONDLOCKENTRY_INITIALIZER,
517 CONDLOCKENTRY_INITIALIZER,
518 CONDLOCKENTRY_INITIALIZER,
519 CONDLOCKENTRY_INITIALIZER,
520 CONDLOCKENTRY_INITIALIZER,
521 CONDLOCKENTRY_INITIALIZER,
522 CONDLOCKENTRY_INITIALIZER,
523 CONDLOCKENTRY_INITIALIZER,
524 CONDLOCKENTRY_INITIALIZER,
525 CONDLOCKENTRY_INITIALIZER,
526 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
527 CONDLOCKENTRY_INITIALIZER,
528 CONDLOCKENTRY_INITIALIZER,
529 CONDLOCKENTRY_INITIALIZER,
530 CONDLOCKENTRY_INITIALIZER,
531 CONDLOCKENTRY_INITIALIZER,
532 CONDLOCKENTRY_INITIALIZER,
533 CONDLOCKENTRY_INITIALIZER,
534 CONDLOCKENTRY_INITIALIZER,
535 CONDLOCKENTRY_INITIALIZER,
536 CONDLOCKENTRY_INITIALIZER,
537 CONDLOCKENTRY_INITIALIZER,
538 CONDLOCKENTRY_INITIALIZER,
539 CONDLOCKENTRY_INITIALIZER,
540 CONDLOCKENTRY_INITIALIZER,
541 CONDLOCKENTRY_INITIALIZER,
542 CONDLOCKENTRY_INITIALIZER,
543 CONDLOCKENTRY_INITIALIZER,
544 CONDLOCKENTRY_INITIALIZER,
545 CONDLOCKENTRY_INITIALIZER,
546 CONDLOCKENTRY_INITIALIZER,
547 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
548 CONDLOCKENTRY_INITIALIZER,
549 CONDLOCKENTRY_INITIALIZER,
550 CONDLOCKENTRY_INITIALIZER,
551 CONDLOCKENTRY_INITIALIZER,
552 CONDLOCKENTRY_INITIALIZER,
553 CONDLOCKENTRY_INITIALIZER,
554 CONDLOCKENTRY_INITIALIZER,
555 CONDLOCKENTRY_INITIALIZER,
556 CONDLOCKENTRY_INITIALIZER,
557 CONDLOCKENTRY_INITIALIZER,
558 CONDLOCKENTRY_INITIALIZER,
559 CONDLOCKENTRY_INITIALIZER,
560 CONDLOCKENTRY_INITIALIZER,
561 CONDLOCKENTRY_INITIALIZER,
562 CONDLOCKENTRY_INITIALIZER,
563 CONDLOCKENTRY_INITIALIZER,
564 CONDLOCKENTRY_INITIALIZER,
565 CONDLOCKENTRY_INITIALIZER,
566 CONDLOCKENTRY_INITIALIZER,
567 CONDLOCKENTRY_INITIALIZER,
568 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
569 CONDLOCKENTRY_INITIALIZER,
570 CONDLOCKENTRY_INITIALIZER,
571 CONDLOCKENTRY_INITIALIZER,
572 CONDLOCKENTRY_INITIALIZER,
573 CONDLOCKENTRY_INITIALIZER,
574 CONDLOCKENTRY_INITIALIZER,
575 CONDLOCKENTRY_INITIALIZER,
576 CONDLOCKENTRY_INITIALIZER,
577 CONDLOCKENTRY_INITIALIZER,
578 CONDLOCKENTRY_INITIALIZER,
579 CONDLOCKENTRY_INITIALIZER,
580 CONDLOCKENTRY_INITIALIZER,
581 CONDLOCKENTRY_INITIALIZER,
582 CONDLOCKENTRY_INITIALIZER,
583 CONDLOCKENTRY_INITIALIZER,
584 CONDLOCKENTRY_INITIALIZER,
585 CONDLOCKENTRY_INITIALIZER,
586 CONDLOCKENTRY_INITIALIZER,
587 CONDLOCKENTRY_INITIALIZER,
588 CONDLOCKENTRY_INITIALIZER,
589 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
590 CONDLOCKENTRY_INITIALIZER,
591 CONDLOCKENTRY_INITIALIZER,
592 CONDLOCKENTRY_INITIALIZER,
593 CONDLOCKENTRY_INITIALIZER,
594 CONDLOCKENTRY_INITIALIZER,
595 CONDLOCKENTRY_INITIALIZER,
596 CONDLOCKENTRY_INITIALIZER,
597 CONDLOCKENTRY_INITIALIZER,
598 CONDLOCKENTRY_INITIALIZER,
599 CONDLOCKENTRY_INITIALIZER,
600 CONDLOCKENTRY_INITIALIZER,
601 CONDLOCKENTRY_INITIALIZER,
602 CONDLOCKENTRY_INITIALIZER,
603 CONDLOCKENTRY_INITIALIZER,
604 CONDLOCKENTRY_INITIALIZER,
605 CONDLOCKENTRY_INITIALIZER,
606 CONDLOCKENTRY_INITIALIZER,
607 CONDLOCKENTRY_INITIALIZER,
608 CONDLOCKENTRY_INITIALIZER,
609 CONDLOCKENTRY_INITIALIZER,
610 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
611 CONDLOCKENTRY_INITIALIZER,
612 CONDLOCKENTRY_INITIALIZER,
613 CONDLOCKENTRY_INITIALIZER,
614 CONDLOCKENTRY_INITIALIZER,
615 CONDLOCKENTRY_INITIALIZER,
616 CONDLOCKENTRY_INITIALIZER,
617 CONDLOCKENTRY_INITIALIZER,
618 CONDLOCKENTRY_INITIALIZER,
619 CONDLOCKENTRY_INITIALIZER,
620 CONDLOCKENTRY_INITIALIZER,
621 CONDLOCKENTRY_INITIALIZER,
622 CONDLOCKENTRY_INITIALIZER,
623 CONDLOCKENTRY_INITIALIZER,
624 CONDLOCKENTRY_INITIALIZER,
625 CONDLOCKENTRY_INITIALIZER,
626 CONDLOCKENTRY_INITIALIZER,
627 CONDLOCKENTRY_INITIALIZER,
628 CONDLOCKENTRY_INITIALIZER,
629 CONDLOCKENTRY_INITIALIZER,
630 CONDLOCKENTRY_INITIALIZER,
631 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
632 CONDLOCKENTRY_INITIALIZER,
633 CONDLOCKENTRY_INITIALIZER,
634 CONDLOCKENTRY_INITIALIZER,
635 CONDLOCKENTRY_INITIALIZER,
636 CONDLOCKENTRY_INITIALIZER,
637 CONDLOCKENTRY_INITIALIZER,
638 CONDLOCKENTRY_INITIALIZER,
639 CONDLOCKENTRY_INITIALIZER,
640 CONDLOCKENTRY_INITIALIZER,
641 CONDLOCKENTRY_INITIALIZER,
642 CONDLOCKENTRY_INITIALIZER,
643 CONDLOCKENTRY_INITIALIZER,
644 CONDLOCKENTRY_INITIALIZER,
645 CONDLOCKENTRY_INITIALIZER,
646 CONDLOCKENTRY_INITIALIZER,
647 CONDLOCKENTRY_INITIALIZER,
648 CONDLOCKENTRY_INITIALIZER,
649 CONDLOCKENTRY_INITIALIZER,
650 CONDLOCKENTRY_INITIALIZER,
651 CONDLOCKENTRY_INITIALIZER,
652 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
653 CONDLOCKENTRY_INITIALIZER,
654 CONDLOCKENTRY_INITIALIZER,
655 CONDLOCKENTRY_INITIALIZER,
656 CONDLOCKENTRY_INITIALIZER,
657 CONDLOCKENTRY_INITIALIZER,
658 CONDLOCKENTRY_INITIALIZER,
659 CONDLOCKENTRY_INITIALIZER,
660 CONDLOCKENTRY_INITIALIZER,
661 CONDLOCKENTRY_INITIALIZER,
662 CONDLOCKENTRY_INITIALIZER,
663 CONDLOCKENTRY_INITIALIZER,
664 CONDLOCKENTRY_INITIALIZER,
665 CONDLOCKENTRY_INITIALIZER,
666 CONDLOCKENTRY_INITIALIZER,
667 CONDLOCKENTRY_INITIALIZER,
668 CONDLOCKENTRY_INITIALIZER,
669 CONDLOCKENTRY_INITIALIZER,
670 CONDLOCKENTRY_INITIALIZER,
671 CONDLOCKENTRY_INITIALIZER,
672 CONDLOCKENTRY_INITIALIZER,
673 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
674 CONDLOCKENTRY_INITIALIZER,
675 CONDLOCKENTRY_INITIALIZER,
676 CONDLOCKENTRY_INITIALIZER,
677 CONDLOCKENTRY_INITIALIZER,
678 CONDLOCKENTRY_INITIALIZER,
679 CONDLOCKENTRY_INITIALIZER,
680 CONDLOCKENTRY_INITIALIZER,
681 CONDLOCKENTRY_INITIALIZER,
682 CONDLOCKENTRY_INITIALIZER,
683 CONDLOCKENTRY_INITIALIZER,
684 CONDLOCKENTRY_INITIALIZER,
685 CONDLOCKENTRY_INITIALIZER,
686 CONDLOCKENTRY_INITIALIZER,
687 CONDLOCKENTRY_INITIALIZER,
688 CONDLOCKENTRY_INITIALIZER,
689 CONDLOCKENTRY_INITIALIZER,
690 CONDLOCKENTRY_INITIALIZER,
691 CONDLOCKENTRY_INITIALIZER,
692 CONDLOCKENTRY_INITIALIZER,
693 CONDLOCKENTRY_INITIALIZER,
694 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
695 CONDLOCKENTRY_INITIALIZER,
696 CONDLOCKENTRY_INITIALIZER,
697 CONDLOCKENTRY_INITIALIZER,
698 CONDLOCKENTRY_INITIALIZER,
699 CONDLOCKENTRY_INITIALIZER,
700 CONDLOCKENTRY_INITIALIZER,
701 CONDLOCKENTRY_INITIALIZER,
702 CONDLOCKENTRY_INITIALIZER,
703 CONDLOCKENTRY_INITIALIZER,
704 CONDLOCKENTRY_INITIALIZER,
705 CONDLOCKENTRY_INITIALIZER,
706 CONDLOCKENTRY_INITIALIZER,
707 CONDLOCKENTRY_INITIALIZER,
708 CONDLOCKENTRY_INITIALIZER,
709 CONDLOCKENTRY_INITIALIZER,
710 CONDLOCKENTRY_INITIALIZER,
711 CONDLOCKENTRY_INITIALIZER,
712 CONDLOCKENTRY_INITIALIZER,
713 CONDLOCKENTRY_INITIALIZER,
714 CONDLOCKENTRY_INITIALIZER,
715 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
716 CONDLOCKENTRY_INITIALIZER,
717 CONDLOCKENTRY_INITIALIZER,
718 CONDLOCKENTRY_INITIALIZER,
719 CONDLOCKENTRY_INITIALIZER,
720 CONDLOCKENTRY_INITIALIZER,
721 CONDLOCKENTRY_INITIALIZER,
722 CONDLOCKENTRY_INITIALIZER,
723 CONDLOCKENTRY_INITIALIZER,
724 CONDLOCKENTRY_INITIALIZER,
725 CONDLOCKENTRY_INITIALIZER,
726 CONDLOCKENTRY_INITIALIZER,
727 CONDLOCKENTRY_INITIALIZER,
728 CONDLOCKENTRY_INITIALIZER,
729 CONDLOCKENTRY_INITIALIZER,
730 CONDLOCKENTRY_INITIALIZER,
731 CONDLOCKENTRY_INITIALIZER,
732 CONDLOCKENTRY_INITIALIZER,
733 CONDLOCKENTRY_INITIALIZER,
734 CONDLOCKENTRY_INITIALIZER,
735 CONDLOCKENTRY_INITIALIZER,
736 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
737 CONDLOCKENTRY_INITIALIZER,
738 CONDLOCKENTRY_INITIALIZER,
739 CONDLOCKENTRY_INITIALIZER,
740 CONDLOCKENTRY_INITIALIZER,
741 CONDLOCKENTRY_INITIALIZER,
742 CONDLOCKENTRY_INITIALIZER,
743 CONDLOCKENTRY_INITIALIZER,
744 CONDLOCKENTRY_INITIALIZER,
745 CONDLOCKENTRY_INITIALIZER,
746 CONDLOCKENTRY_INITIALIZER,
747 CONDLOCKENTRY_INITIALIZER,
748 CONDLOCKENTRY_INITIALIZER,
749 CONDLOCKENTRY_INITIALIZER,
750 CONDLOCKENTRY_INITIALIZER,
751 CONDLOCKENTRY_INITIALIZER,
752 CONDLOCKENTRY_INITIALIZER,
753 CONDLOCKENTRY_INITIALIZER,
754 CONDLOCKENTRY_INITIALIZER,
755 CONDLOCKENTRY_INITIALIZER,
756 CONDLOCKENTRY_INITIALIZER,
757 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
758 CONDLOCKENTRY_INITIALIZER,
759 CONDLOCKENTRY_INITIALIZER,
760 CONDLOCKENTRY_INITIALIZER,
761 CONDLOCKENTRY_INITIALIZER,
762 CONDLOCKENTRY_INITIALIZER,
763 CONDLOCKENTRY_INITIALIZER,
764 CONDLOCKENTRY_INITIALIZER,
765 CONDLOCKENTRY_INITIALIZER,
766 CONDLOCKENTRY_INITIALIZER,
767 CONDLOCKENTRY_INITIALIZER,
768 CONDLOCKENTRY_INITIALIZER,
769 CONDLOCKENTRY_INITIALIZER,
770 CONDLOCKENTRY_INITIALIZER,
771 CONDLOCKENTRY_INITIALIZER,
772 CONDLOCKENTRY_INITIALIZER,
773 CONDLOCKENTRY_INITIALIZER,
774 CONDLOCKENTRY_INITIALIZER,
775 CONDLOCKENTRY_INITIALIZER,
776 CONDLOCKENTRY_INITIALIZER,
777 CONDLOCKENTRY_INITIALIZER,
778 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
779 CONDLOCKENTRY_INITIALIZER,
780 CONDLOCKENTRY_INITIALIZER,
781 CONDLOCKENTRY_INITIALIZER,
782 CONDLOCKENTRY_INITIALIZER,
783 CONDLOCKENTRY_INITIALIZER,
784 CONDLOCKENTRY_INITIALIZER,
785 CONDLOCKENTRY_INITIALIZER,
786 CONDLOCKENTRY_INITIALIZER,
787 CONDLOCKENTRY_INITIALIZER,
788 CONDLOCKENTRY_INITIALIZER,
789 CONDLOCKENTRY_INITIALIZER,
790 CONDLOCKENTRY_INITIALIZER,
791 CONDLOCKENTRY_INITIALIZER,
792 CONDLOCKENTRY_INITIALIZER,
793 CONDLOCKENTRY_INITIALIZER,
794 CONDLOCKENTRY_INITIALIZER,
795 CONDLOCKENTRY_INITIALIZER,
796 CONDLOCKENTRY_INITIALIZER,
797 CONDLOCKENTRY_INITIALIZER,
798 CONDLOCKENTRY_INITIALIZER,
799 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
800 CONDLOCKENTRY_INITIALIZER,
801 CONDLOCKENTRY_INITIALIZER,
802 CONDLOCKENTRY_INITIALIZER,
803 CONDLOCKENTRY_INITIALIZER,
804 CONDLOCKENTRY_INITIALIZER,
805 CONDLOCKENTRY_INITIALIZER,
806 CONDLOCKENTRY_INITIALIZER,
807 CONDLOCKENTRY_INITIALIZER,
808 CONDLOCKENTRY_INITIALIZER,
809 CONDLOCKENTRY_INITIALIZER,
810 CONDLOCKENTRY_INITIALIZER,
811 CONDLOCKENTRY_INITIALIZER,
812 CONDLOCKENTRY_INITIALIZER,
813 CONDLOCKENTRY_INITIALIZER,
814 CONDLOCKENTRY_INITIALIZER,
815 CONDLOCKENTRY_INITIALIZER,
816 CONDLOCKENTRY_INITIALIZER,
817 CONDLOCKENTRY_INITIALIZER,
818 CONDLOCKENTRY_INITIALIZER,
819 CONDLOCKENTRY_INITIALIZER,
820 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
821 CONDLOCKENTRY_INITIALIZER,
822 CONDLOCKENTRY_INITIALIZER,
823 CONDLOCKENTRY_INITIALIZER,
824 CONDLOCKENTRY_INITIALIZER,
825 CONDLOCKENTRY_INITIALIZER,
826 CONDLOCKENTRY_INITIALIZER,
827 CONDLOCKENTRY_INITIALIZER,
828 CONDLOCKENTRY_INITIALIZER,
829 CONDLOCKENTRY_INITIALIZER,
830 CONDLOCKENTRY_INITIALIZER,
831 CONDLOCKENTRY_INITIALIZER,
832 CONDLOCKENTRY_INITIALIZER,
833 CONDLOCKENTRY_INITIALIZER,
834 CONDLOCKENTRY_INITIALIZER,
835 CONDLOCKENTRY_INITIALIZER,
836 CONDLOCKENTRY_INITIALIZER,
837 CONDLOCKENTRY_INITIALIZER,
838 CONDLOCKENTRY_INITIALIZER,
839 CONDLOCKENTRY_INITIALIZER,
840 CONDLOCKENTRY_INITIALIZER,
841 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
842 CONDLOCKENTRY_INITIALIZER,
843 CONDLOCKENTRY_INITIALIZER,
844 CONDLOCKENTRY_INITIALIZER,
845 CONDLOCKENTRY_INITIALIZER,
846 CONDLOCKENTRY_INITIALIZER,
847 CONDLOCKENTRY_INITIALIZER,
848 CONDLOCKENTRY_INITIALIZER,
849 CONDLOCKENTRY_INITIALIZER,
850 CONDLOCKENTRY_INITIALIZER,
851 CONDLOCKENTRY_INITIALIZER,
852 CONDLOCKENTRY_INITIALIZER,
853 CONDLOCKENTRY_INITIALIZER,
854 CONDLOCKENTRY_INITIALIZER,
855 CONDLOCKENTRY_INITIALIZER,
856 CONDLOCKENTRY_INITIALIZER,
857 CONDLOCKENTRY_INITIALIZER,
858 CONDLOCKENTRY_INITIALIZER,
859 CONDLOCKENTRY_INITIALIZER,
860 CONDLOCKENTRY_INITIALIZER,
861 CONDLOCKENTRY_INITIALIZER,
862 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
863 CONDLOCKENTRY_INITIALIZER,
864 CONDLOCKENTRY_INITIALIZER,
865 CONDLOCKENTRY_INITIALIZER,
866 CONDLOCKENTRY_INITIALIZER,
867 CONDLOCKENTRY_INITIALIZER,
868 CONDLOCKENTRY_INITIALIZER,
869 CONDLOCKENTRY_INITIALIZER,
870 CONDLOCKENTRY_INITIALIZER,
871 CONDLOCKENTRY_INITIALIZER,
872 CONDLOCKENTRY_INITIALIZER,
873 CONDLOCKENTRY_INITIALIZER,
874 CONDLOCKENTRY_INITIALIZER,
875 CONDLOCKENTRY_INITIALIZER,
876 CONDLOCKENTRY_INITIALIZER,
877 CONDLOCKENTRY_INITIALIZER,
878 CONDLOCKENTRY_INITIALIZER,
879 CONDLOCKENTRY_INITIALIZER,
880 CONDLOCKENTRY_INITIALIZER,
881 CONDLOCKENTRY_INITIALIZER,
882 CONDLOCKENTRY_INITIALIZER,
883 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
884 CONDLOCKENTRY_INITIALIZER,
885 CONDLOCKENTRY_INITIALIZER,
886 CONDLOCKENTRY_INITIALIZER,
887 CONDLOCKENTRY_INITIALIZER,
888 CONDLOCKENTRY_INITIALIZER,
889 CONDLOCKENTRY_INITIALIZER,
890 CONDLOCKENTRY_INITIALIZER,
891 CONDLOCKENTRY_INITIALIZER,
892 CONDLOCKENTRY_INITIALIZER,
893 CONDLOCKENTRY_INITIALIZER,
894 CONDLOCKENTRY_INITIALIZER,
895 CONDLOCKENTRY_INITIALIZER,
896 CONDLOCKENTRY_INITIALIZER,
897 CONDLOCKENTRY_INITIALIZER,
898 CONDLOCKENTRY_INITIALIZER,
899 CONDLOCKENTRY_INITIALIZER,
900 CONDLOCKENTRY_INITIALIZER,
901 CONDLOCKENTRY_INITIALIZER,
902 CONDLOCKENTRY_INITIALIZER,
903 CONDLOCKENTRY_INITIALIZER,
904 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
905 CONDLOCKENTRY_INITIALIZER,
906 CONDLOCKENTRY_INITIALIZER,
907 CONDLOCKENTRY_INITIALIZER,
908 CONDLOCKENTRY_INITIALIZER,
909 CONDLOCKENTRY_INITIALIZER,
910 CONDLOCKENTRY_INITIALIZER,
911 CONDLOCKENTRY_INITIALIZER,
912 CONDLOCKENTRY_INITIALIZER,
913 CONDLOCKENTRY_INITIALIZER,
914 CONDLOCKENTRY_INITIALIZER,
915 CONDLOCKENTRY_INITIALIZER,
916 CONDLOCKENTRY_INITIALIZER,
917 CONDLOCKENTRY_INITIALIZER,
918 CONDLOCKENTRY_INITIALIZER,
919 CONDLOCKENTRY_INITIALIZER,
920 CONDLOCKENTRY_INITIALIZER,
921 CONDLOCKENTRY_INITIALIZER,
922 CONDLOCKENTRY_INITIALIZER,
923 CONDLOCKENTRY_INITIALIZER,
924 CONDLOCKENTRY_INITIALIZER,
925 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
926 CONDLOCKENTRY_INITIALIZER,
927 CONDLOCKENTRY_INITIALIZER,
928 CONDLOCKENTRY_INITIALIZER,
929 CONDLOCKENTRY_INITIALIZER,
930 CONDLOCKENTRY_INITIALIZER,
931 CONDLOCKENTRY_INITIALIZER,
932 CONDLOCKENTRY_INITIALIZER,
933 CONDLOCKENTRY_INITIALIZER,
934 CONDLOCKENTRY_INITIALIZER,
935 CONDLOCKENTRY_INITIALIZER,
936 CONDLOCKENTRY_INITIALIZER,
937 CONDLOCKENTRY_INITIALIZER,
938 CONDLOCKENTRY_INITIALIZER,
939 CONDLOCKENTRY_INITIALIZER,
940 CONDLOCKENTRY_INITIALIZER,
941 CONDLOCKENTRY_INITIALIZER,
942 CONDLOCKENTRY_INITIALIZER,
943 CONDLOCKENTRY_INITIALIZER,
944 CONDLOCKENTRY_INITIALIZER,
945 CONDLOCKENTRY_INITIALIZER,
946 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
947 CONDLOCKENTRY_INITIALIZER,
948 CONDLOCKENTRY_INITIALIZER,
949 CONDLOCKENTRY_INITIALIZER,
950 CONDLOCKENTRY_INITIALIZER,
951 CONDLOCKENTRY_INITIALIZER,
952 CONDLOCKENTRY_INITIALIZER,
953 CONDLOCKENTRY_INITIALIZER,
954 CONDLOCKENTRY_INITIALIZER,
955 CONDLOCKENTRY_INITIALIZER,
956 CONDLOCKENTRY_INITIALIZER,
957 CONDLOCKENTRY_INITIALIZER,
958 CONDLOCKENTRY_INITIALIZER,
959 CONDLOCKENTRY_INITIALIZER,
960 CONDLOCKENTRY_INITIALIZER,
961 CONDLOCKENTRY_INITIALIZER,
962 CONDLOCKENTRY_INITIALIZER,
963 CONDLOCKENTRY_INITIALIZER,
964 CONDLOCKENTRY_INITIALIZER,
965 CONDLOCKENTRY_INITIALIZER,
966 CONDLOCKENTRY_INITIALIZER,
967 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
968 CONDLOCKENTRY_INITIALIZER,
969 CONDLOCKENTRY_INITIALIZER,
970 CONDLOCKENTRY_INITIALIZER,
971 CONDLOCKENTRY_INITIALIZER,
972 CONDLOCKENTRY_INITIALIZER,
973 CONDLOCKENTRY_INITIALIZER,
974 CONDLOCKENTRY_INITIALIZER,
975 CONDLOCKENTRY_INITIALIZER,
976 CONDLOCKENTRY_INITIALIZER,
977 CONDLOCKENTRY_INITIALIZER,
978 CONDLOCKENTRY_INITIALIZER,
979 CONDLOCKENTRY_INITIALIZER,
980 CONDLOCKENTRY_INITIALIZER,
981 CONDLOCKENTRY_INITIALIZER,
982 CONDLOCKENTRY_INITIALIZER,
983 CONDLOCKENTRY_INITIALIZER,
984 CONDLOCKENTRY_INITIALIZER,
985 CONDLOCKENTRY_INITIALIZER,
986 CONDLOCKENTRY_INITIALIZER,
987 CONDLOCKENTRY_INITIALIZER,
988 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
989 CONDLOCKENTRY_INITIALIZER,
990 CONDLOCKENTRY_INITIALIZER,
991 CONDLOCKENTRY_INITIALIZER,
992 CONDLOCKENTRY_INITIALIZER,
993 CONDLOCKENTRY_INITIALIZER,
994 CONDLOCKENTRY_INITIALIZER,
995 CONDLOCKENTRY_INITIALIZER,
996 CONDLOCKENTRY_INITIALIZER,
997 CONDLOCKENTRY_INITIALIZER,
998 CONDLOCKENTRY_INITIALIZER,
999 CONDLOCKENTRY_INITIALIZER,
1000 CONDLOCKENTRY_INITIALIZER,
1001 CONDLOCKENTRY_INITIALIZER,
1002 CONDLOCKENTRY_INITIALIZER,
1003 CONDLOCKENTRY_INITIALIZER,
1004 CONDLOCKENTRY_INITIALIZER,
1005 CONDLOCKENTRY_INITIALIZER,
1006 CONDLOCKENTRY_INITIALIZER,
1007 CONDLOCKENTRY_INITIALIZER,
1008 CONDLOCKENTRY_INITIALIZER,
1009 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
1010 CONDLOCKENTRY_INITIALIZER,
1011 CONDLOCKENTRY_INITIALIZER,
1012 CONDLOCKENTRY_INITIALIZER,
1013 CONDLOCKENTRY_INITIALIZER,
1014 CONDLOCKENTRY_INITIALIZER,
1015 CONDLOCKENTRY_INITIALIZER,
1016 CONDLOCKENTRY_INITIALIZER,
1017 CONDLOCKENTRY_INITIALIZER,
1018 CONDLOCKENTRY_INITIALIZER,
1019 CONDLOCKENTRY_INITIALIZER,
1020 CONDLOCKENTRY_INITIALIZER,
1021 CONDLOCKENTRY_INITIALIZER,
1022 CONDLOCKENTRY_INITIALIZER,
1023 CONDLOCKENTRY_INITIALIZER,
1024 CONDLOCKENTRY_INITIALIZER,
1025 CONDLOCKENTRY_INITIALIZER,
1026 CONDLOCKENTRY_INITIALIZER,
1027 CONDLOCKENTRY_INITIALIZER,
1028 CONDLOCKENTRY_INITIALIZER,
1029 CONDLOCKENTRY_INITIALIZER,
1030 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
1031 CONDLOCKENTRY_INITIALIZER,
1032 CONDLOCKENTRY_INITIALIZER,
1033 CONDLOCKENTRY_INITIALIZER,
1034 CONDLOCKENTRY_INITIALIZER,
1035 CONDLOCKENTRY_INITIALIZER,
1036 CONDLOCKENTRY_INITIALIZER,
1037 CONDLOCKENTRY_INITIALIZER,
1038 CONDLOCKENTRY_INITIALIZER,
1039 CONDLOCKENTRY_INITIALIZER,
1040 CONDLOCKENTRY_INITIALIZER,
1041 CONDLOCKENTRY_INITIALIZER,
1042 CONDLOCKENTRY_INITIALIZER,
1043 CONDLOCKENTRY_INITIALIZER,
1044 CONDLOCKENTRY_INITIALIZER,
1045 CONDLOCKENTRY_INITIALIZER,
1046 CONDLOCKENTRY_INITIALIZER,
1047 CONDLOCKENTRY_INITIALIZER,
1048 CONDLOCKENTRY_INITIALIZER,
1049 CONDLOCKENTRY_INITIALIZER,
1050 CONDLOCKENTRY_INITIALIZER,
1051 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
1052 CONDLOCKENTRY_INITIALIZER,
1053 CONDLOCKENTRY_INITIALIZER,
1054 CONDLOCKENTRY_INITIALIZER,
1055 CONDLOCKENTRY_INITIALIZER,
1056 CONDLOCKENTRY_INITIALIZER,
1057 CONDLOCKENTRY_INITIALIZER,
1058 CONDLOCKENTRY_INITIALIZER,
1059 CONDLOCKENTRY_INITIALIZER,
1060 CONDLOCKENTRY_INITIALIZER,
1061 CONDLOCKENTRY_INITIALIZER,
1062 CONDLOCKENTRY_INITIALIZER,
1063 CONDLOCKENTRY_INITIALIZER,
1064 CONDLOCKENTRY_INITIALIZER,
1065 CONDLOCKENTRY_INITIALIZER,
1066 CONDLOCKENTRY_INITIALIZER,
1067 CONDLOCKENTRY_INITIALIZER,
1068 CONDLOCKENTRY_INITIALIZER,
1069 CONDLOCKENTRY_INITIALIZER,
1070 CONDLOCKENTRY_INITIALIZER,
1071 CONDLOCKENTRY_INITIALIZER,
1072 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
1073 CONDLOCKENTRY_INITIALIZER,
1074 CONDLOCKENTRY_INITIALIZER,
1075 CONDLOCKENTRY_INITIALIZER,
1076 CONDLOCKENTRY_INITIALIZER,
1077 CONDLOCKENTRY_INITIALIZER,
1078 CONDLOCKENTRY_INITIALIZER,
1079 CONDLOCKENTRY_INITIALIZER,
1080 CONDLOCKENTRY_INITIALIZER,
1081 CONDLOCKENTRY_INITIALIZER,
1082 CONDLOCKENTRY_INITIALIZER,
1083 CONDLOCKENTRY_INITIALIZER,
1084 CONDLOCKENTRY_INITIALIZER,
1085 CONDLOCKENTRY_INITIALIZER,
1086 CONDLOCKENTRY_INITIALIZER,
1087 CONDLOCKENTRY_INITIALIZER,
1088 CONDLOCKENTRY_INITIALIZER,
1089 CONDLOCKENTRY_INITIALIZER,
1090 CONDLOCKENTRY_INITIALIZER,
1091 CONDLOCKENTRY_INITIALIZER,
1092 CONDLOCKENTRY_INITIALIZER,
1093 krisbash 1.1 CONDLOCKENTRY_INITIALIZER,
1094 CONDLOCKENTRY_INITIALIZER,
1095 CONDLOCKENTRY_INITIALIZER,
1096 CONDLOCKENTRY_INITIALIZER,
1097 CONDLOCKENTRY_INITIALIZER,
1098 CONDLOCKENTRY_INITIALIZER,
1099 CONDLOCKENTRY_INITIALIZER,
1100 CONDLOCKENTRY_INITIALIZER,
1101 CONDLOCKENTRY_INITIALIZER,
1102 CONDLOCKENTRY_INITIALIZER,
1103 CONDLOCKENTRY_INITIALIZER,
1104 CONDLOCKENTRY_INITIALIZER,
1105 CONDLOCKENTRY_INITIALIZER,
1106 CONDLOCKENTRY_INITIALIZER,
1107 CONDLOCKENTRY_INITIALIZER,
1108 CONDLOCKENTRY_INITIALIZER,
1109 CONDLOCKENTRY_INITIALIZER
1110 #endif /* defined(CONFIG_FAVORSIZE) */
1111 };
1112
1113 static unsigned int _initialized = 0;
1114 krisbash 1.1 static pthread_mutex_t _mutex = PTHREAD_MUTEX_INITIALIZER;
1115
1116 static void _AtForkHelper(unsigned int lock)
1117 {
1118 size_t i;
1119
1120 for (i = 0; i < CONDLOCK_NUMSLOTS; i++)
1121 {
1122 if (lock)
1123 pthread_mutex_lock(&_slots[i].mutex);
1124 else
1125 pthread_mutex_unlock(&_slots[i].mutex);
1126 }
1127
1128 if (lock)
1129 pthread_mutex_lock(&_mutex);
1130 else
1131 pthread_mutex_unlock(&_mutex);
1132 }
1133
1134 static void _AtForkPrepare()
1135 krisbash 1.1 {
1136 /* Lock */
1137 _AtForkHelper(1);
1138 }
1139
1140 static void _AtForkParent()
1141 {
1142 /* Unlock */
1143 _AtForkHelper(0);
1144 }
1145
1146 static void _AtForkChild()
1147 {
1148 _initialized = 0;
1149 /* Unlock */
1150 _AtForkHelper(0);
1151 }
1152
1153 static void _Initialize()
1154 {
1155 pthread_mutex_lock(&_mutex);
1156 krisbash 1.1
1157 if (_initialized == 0)
1158 {
1159 pthread_atfork(_AtForkPrepare, _AtForkParent, _AtForkChild);
1160 _initialized = 1;
1161 }
1162
1163 pthread_mutex_unlock(&_mutex);
1164 }
1165
1166 PAL_INLINE CondLockSlot* _GetSlot(ptrdiff_t x)
1167 {
1168 size_t i = (x ^ (x >> 3) ^ (x >> 12) ^ (x >> 22)) % CONDLOCK_NUMSLOTS;
1169 return &_slots[i];
1170 }
1171
1172 /*
1173 **==============================================================================
1174 **
1175 ** Public definitions:
1176 **
1177 krisbash 1.1 **==============================================================================
1178 */
1179
1180 int CondLock_Wait(
1181 ptrdiff_t key,
1182 _In_ volatile const ptrdiff_t* destination,
1183 ptrdiff_t comparand,
1184 size_t spinCount)
1185 {
1186 CondLockSlot* slot;
1187
1188 if (_initialized == 0)
1189 _Initialize();
1190
1191 /* Get the slot for this key */
1192 slot = _GetSlot(key);
1193
1194 /* Lock the entry */
1195 pthread_mutex_lock(&slot->mutex);
1196
1197 /* Is the condition already satisfied? */
1198 krisbash 1.1 if (*destination != comparand)
1199 {
1200 pthread_mutex_unlock(&slot->mutex);
1201 return 1;
1202 }
1203
1204 /* Update the state of this slot */
1205 {
1206 if (slot->waiters > 0 && slot->key != key)
1207 slot->collision = 1;
1208
1209 slot->key = key;
1210 slot->waiters++;
1211 }
1212
1213 /* Wait (unlocks mutex on entry and relocks it on exit) */
1214 pthread_cond_wait(&slot->cond, &slot->mutex);
1215
1216 /* Decrement number of waiters */
1217 slot->waiters--;
1218
1219 krisbash 1.1 /* If the number of waiters is zero, clear the collision state */
1220 if (slot->waiters == 0)
1221 slot->collision = 0;
1222
1223 /* Unlock the mutex */
1224 pthread_mutex_unlock(&slot->mutex);
1225
1226 /* Return 1 if condition is satisfied (or 0 otherwise) */
1227 return *destination == comparand ? 0 : 1;
1228 }
1229
1230 void CondLock_Broadcast(
1231 ptrdiff_t key)
1232 {
1233 CondLockSlot* slot;
1234
1235 if (_initialized == 0)
1236 _Initialize();
1237
1238 slot = _GetSlot(key);
1239 pthread_mutex_lock(&slot->mutex);
1240 krisbash 1.1 pthread_cond_broadcast(&slot->cond);
1241 pthread_mutex_unlock(&slot->mutex);
1242 }
1243
1244 void CondLock_Signal(
1245 ptrdiff_t key)
1246 {
1247 CondLockSlot* slot;
1248
1249 if (_initialized == 0)
1250 _Initialize();
1251
1252 slot = _GetSlot(key);
1253 pthread_mutex_lock(&slot->mutex);
1254
1255 if (slot->collision)
1256 {
1257 /* There are collisions, so wake up all waiters */
1258 pthread_cond_broadcast(&slot->cond);
1259 }
1260 else
1261 krisbash 1.1 {
1262 /* There no collisions, so wake up next waiter in line */
1263 pthread_cond_signal(&slot->cond);
1264 }
1265
1266 pthread_mutex_unlock(&slot->mutex);
1267 }
|