mirror of
https://github.com/postgres/postgres.git
synced 2026-04-05 17:25:55 -04:00
during the regression test. The problem has been reproduced on two machine but both of these are the same type of hardware and software. I also tried to recreate the problem on other machines, on older version of AIX but I couldn't. After looked through pgsql-hackers mailing list, I focused on spin lock issue to solve the problem. The easiest and may not be the best solution for the problem is to give up HAS_TEST_AND_SET. This actually works. One another and better solution for the problem is to use _check_lock() and _clear_lock() as spin lock. Important thing here is to define S_UNLOCK() with _clear_lock(). This will solve the so called "Compiler bug" issue someone wrote on the mailing list. We have some other API such as cs(), compare_and_swap() and fetch_and_or() to do test and set on AIX, but any of these didn't solve my problem. I wrote tiny testing program to see if we have any bug of these API of AIX, but I couldn't see any problem except for compare_and_swap(). It seems that you can not use compare_and_swap() for the purpose, as it would not work as spin lock on any SMP machines I tested. I don't know the reason why cs() nor fetch_and_or()/fetch_and_and() will not work with PostgreSQL on p690. These worked with my testing program on all machines I tested. Tomoyuki Niijima |
||
|---|---|---|
| .. | ||
| backendid.h | ||
| block.h | ||
| buf.h | ||
| buf_internals.h | ||
| buffile.h | ||
| bufmgr.h | ||
| bufpage.h | ||
| fd.h | ||
| freespace.h | ||
| ipc.h | ||
| item.h | ||
| itemid.h | ||
| itempos.h | ||
| itemptr.h | ||
| large_object.h | ||
| lmgr.h | ||
| lock.h | ||
| lwlock.h | ||
| off.h | ||
| page.h | ||
| pg_sema.h | ||
| pg_shmem.h | ||
| pmsignal.h | ||
| pos.h | ||
| proc.h | ||
| relfilenode.h | ||
| s_lock.h | ||
| shmem.h | ||
| sinval.h | ||
| sinvaladt.h | ||
| smgr.h | ||
| spin.h | ||