Re: Intermediate report for AIX 5L port
От | Tom Lane |
---|---|
Тема | Re: Intermediate report for AIX 5L port |
Дата | |
Msg-id | 24818.1008019478@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Intermediate report for AIX 5L port (Tatsuo Ishii <t-ishii@sra.co.jp>) |
Ответы |
Re: Intermediate report for AIX 5L port
|
Список | pgsql-hackers |
Got it. The AIX compiler apparently feels free to rearrange the sequence proc->lwWaiting = true; proc->lwExclusive = (mode == LW_EXCLUSIVE); proc->lwWaitLink = NULL; if (lock->head== NULL) lock->head = proc; else lock->tail->lwWaitLink = proc; lock->tail = proc; /* Can release the mutex now */ SpinLockRelease_NoHoldoff(&lock->mutex); into something wherein the SpinLockRelease (which is just "x = 0") occurs before the last two assignments into the lock structure. Boo, hiss. Evidently, on your multiprocessor machine, there may be another CPU that is able to obtain the spinlock and then read the un-updated lock values before the stores occur. Declaring the lock pointer "volatile" seems to prevent this misbehavior. Personally I'd call this a compiler bug; isn't it supposed to consider semicolons as sequence points? I never heard that rearranging the order of stores into memory was considered a kosher optimization of C code. regards, tom lane
В списке pgsql-hackers по дате отправления: