locking change help

Bruce Momjian <maillist@candle.pha.pa.us>

From: Bruce Momjian <maillist@candle.pha.pa.us>
To: hackers@postgreSQL.org (PostgreSQL-development)
Date: 1998-01-23T06:21:41Z
Lists: pgsql-hackers
I am trying to change the lock manager so read locks will not be granted
if there is a write-lock waiting for a lock.  The following patch helps,
but is incomplete.  Can someone figure out the right fix?  I tried
putting this code inside LockResolveConflicts(), but that didn't work
either.

---------------------------------------------------------------------------

*** ./backend/storage/lmgr/lock.c.orig	Fri Jan 23 01:18:01 1998
--- ./backend/storage/lmgr/lock.c	Fri Jan 23 01:18:53 1998
***************
*** 602,607 ****
--- 602,620 ----
  
  	status = LockResolveConflicts(ltable, lock, lockt, myXid);
  
+ 		/* ------------------------
+ 		 * If someone with a greater priority is waiting for the lock,
+ 		 * do not continue and share the lock, even if we can.  bjm
+ 		 * ------------------------
+ 		 */
+ 		int				myprio = ltable->ctl->prio[lockt];
+ 		PROC_QUEUE		*waitQueue = &(lock->waitProcs);
+ 		PROC			*topproc = (PROC *) MAKE_PTR(waitQueue->links.prev);
+ 
+ 		if (topproc && topproc->prio > myprio)
+ 			status = STATUS_FOUND;
+ 	}
+ 
  	if (status == STATUS_OK)
  	{
  		GrantLock(lock, lockt);

-- 
Bruce Momjian
maillist@candle.pha.pa.us