| From: | Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us> |
|---|---|
| To: | hackers(at)postgreSQL(dot)org (PostgreSQL-development) |
| Subject: | locking change help |
| Date: | 1998-01-23 06:21:41 |
| Message-ID: | 199801230621.BAA15426@candle.pha.pa.us |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| 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(at)candle(dot)pha(dot)pa(dot)us
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Vadim B. Mikheev | 1998-01-23 06:55:28 | Re: [HACKERS] LOCK command |
| Previous Message | The Hermit Hacker | 1998-01-23 04:01:14 | Re: [HACKERS] Re: [PORTS] Important Announcement |