RE: [HACKERS] ? potential bug in LockBuffer ?

2001-05-22 Thread Mikheev, Vadim

> (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 ?

2001-05-22 Thread Mauricio Breternitz


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