RE: [HACKERS] ? potential bug in LockBuffer ?
> (buf->r_locks)--; > if (!buf->r_locks) > *buflock &= ~BL_R_LOCK; > > > Or I am missing something... buflock is per-backend flag, it's not in shmem. Backend is allowed only single lock per buffer. Vadim ---(end of broadcast)--- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])
[HACKERS] ? potential bug in LockBuffer ?
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 ---(end of broadcast)--- TIP 4: Don't 'kill -9' the postmaster