(file) Return to condlockposix.c CVS log (file) (dir) Up to [OMI] / omi / pal

   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              }

ViewCVS 0.9.2