? potential bug in LockBuffer ?
| От | Mauricio Breternitz |
|---|---|
| Тема | ? potential bug in LockBuffer ? |
| Дата | |
| Msg-id | F166XCj303wxNaJkGuS0000f852@hotmail.com обсуждение исходный текст |
| Список | pgsql-hackers |
Folks: As I study the source of LockBuffer in bufmgr.c I came across
the following code snippet for the case of releasing a
shared (read) lock:
if (mode == BUFFER_LOCK_UNLOCK) { if (*buflock & BL_R_LOCK) {
Assert(buf->r_locks > 0); Assert(!(buf->w_lock)); Assert(!(*buflock &
(BL_W_LOCK| BL_RI_LOCK))); (buf->r_locks)--; *buflock &= ~BL_R_LOCK;
This code resets BL_R_LOCK on the first release of a shared lock.
I think it should check that the count of readers be zero:
( something like
if (mode == BUFFER_LOCK_UNLOCK) { if (*buflock & BL_R_LOCK) {
Assert(buf->r_locks > 0); Assert(!(buf->w_lock)); Assert(!(*buflock &
(BL_W_LOCK| BL_RI_LOCK))); (buf->r_locks)--; if (!buf->r_locks)
*buflock &= ~BL_R_LOCK;
Or I am missing something...
thanks regards Mauricio
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com
В списке pgsql-hackers по дате отправления: