Commit 52f1b2f3 authored by Bruce Momjian's avatar Bruce Momjian

Prevent priority inversion in locking by checking for existing locks

before going into queue behind person with higher piority.
parent 7d62e9c7
PostgreSQL 6.5 Fri Apr 23 17:40:19 EDT 1999
=========================================================
A dump/restore is required.
PLACE HOLDER
PostgreSQL 6.4.2 Sat Jan 2 11:04:05 EST 1999
=========================================================
......
......@@ -4,7 +4,7 @@
<Abstract>
<Para>
Complete installation instructions for
<ProductName>Postgres</ProductName> v6.4.
<ProductName>Postgres</ProductName> v6.5.
</Para>
</Abstract>
......@@ -167,8 +167,8 @@ remaining steps in the installation will happen in this account.
<Step Performance="required">
<Para>
Ftp file
<ulink url="ftp://ftp.postgresql.org/pub/postgresql-v6.4.tar.gz">
<filename>ftp://ftp.postgresql.org/pub/postgresql-v6.4.tar.gz</filename></ulink>
<ulink url="ftp://ftp.postgresql.org/pub/postgresql-v6.5.tar.gz">
<filename>ftp://ftp.postgresql.org/pub/postgresql-v6.5.tar.gz</filename></ulink>
from the Internet. Store it in your home directory.
</Para>
</Step>
......@@ -268,7 +268,7 @@ from the new distribution:
<ProgramListing>
$ cd
$ gunzip -c postgresql-v6.4.tar.gz \
$ gunzip -c postgresql-v6.5.tar.gz \
| tar xvf - src/bin/pg_dump/pg_dumpall
$ chmod a+x src/bin/pg_dump/pg_dumpall
$ src/bin/pg_dump/pg_dumpall -z > db.out
......@@ -411,7 +411,7 @@ $ exit
Unzip and untar the new source file. Type
<ProgramListing>
$ cd /usr/src/pgsql
$ gunzip -c ~/postgresql-v6.4.tar.gz | tar xvf -
$ gunzip -c ~/postgresql-v6.5.tar.gz | tar xvf -
</ProgramListing>
</Para>
</Step>
......@@ -989,17 +989,7 @@ For example,
<listitem>
<Para>
For a i686/Linux-ELF platform, no tests failed since this is the
v6.4 regression testing reference platform.
</Para>
</listitem>
<listitem>
<Para>
For the SPARC/Linux-ELF platform, using the 970525 beta version of
<ProductName>Postgres</ProductName> v6.2 the following tests "failed":
float8 and geometry "failed" due to minor precision differences in
floating point numbers. select_views produces massively different output,
but the differences are due to minor floating point differences.
v6.5 regression testing reference platform.
</Para>
</listitem>
......@@ -1109,11 +1099,11 @@ VACUUM;
<Para>
Clean up after yourself. Type
<ProgramListing>
$ rm -rf /usr/src/pgsql_6_0
$ rm -rf /usr/local/pgsql_6_0
$ rm -rf /usr/src/pgsql_6_5
$ rm -rf /usr/local/pgsql_6_5
# Also delete old database directory tree if it is not in
# /usr/local/pgsql_6_0/data
$ rm ~/postgresql-v6.2.1.tar.gz
# /usr/local/pgsql_6_5/data
$ rm ~/postgresql-v6.5.tar.gz
</ProgramListing>
</Para>
</Step>
......@@ -1160,7 +1150,7 @@ $ lpr -l -s -r manpage.hp
<itemizedlist>
<listitem>
<para>
The version of <ProductName>Postgres</ProductName> (v6.4, 6.3.2, beta 981014, etc.).
The version of <ProductName>Postgres</ProductName> (v6.5, 6.4.2, beta 981014, etc.).
</para>
</listitem>
......
......@@ -6,7 +6,7 @@
# Copyright (c) 1998, Regents of the University of California
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.7 1999/03/14 16:02:57 momjian Exp $
# $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.8 1999/04/30 02:04:49 momjian Exp $
#
#-------------------------------------------------------------------------
......@@ -86,14 +86,14 @@ ifeq ($(PORTNAME), bsdi)
ifdef BSD_SHLIB
ifeq ($(DLSUFFIX), .so)
install-shlib-dep := install-shlib
shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
LDFLAGS_SL += -shared
CFLAGS += $(CFLAGS_SL)
endif
ifeq ($(DLSUFFIX), .o)
install-shlib-dep := install-shlib
shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
LD := shlicc
shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
LD := shlicc
LDFLAGS_SL += -O -r
CFLAGS += $(CFLAGS_SL)
endif
......
......@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.46 1999/03/06 21:17:44 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.47 1999/04/30 02:04:50 momjian Exp $
*
* NOTES
* Outside modules can create a lock table and acquire/release
......@@ -820,13 +820,17 @@ LockResolveConflicts(LOCKMETHOD lockmethod,
/* ------------------------
* If someone with a greater priority is waiting for the lock,
* do not continue and share the lock, even if we can. bjm
* Don't do this if the process already has some locks, because
* this could hold up other people waiting on our locks, causing
* a priority inversion. bjm
* ------------------------
*/
int myprio = LockMethodTable[lockmethod]->ctl->prio[lockmode];
PROC_QUEUE *waitQueue = &(lock->waitProcs);
PROC *topproc = (PROC *) MAKE_PTR(waitQueue->links.prev);
if (waitQueue->size && topproc->prio > myprio)
if (SHMQueueEmpty(lockQueue) && waitQueue->size &&
topproc->prio > myprio)
{
XID_PRINT("LockResolveConflicts: higher priority proc waiting",
result);
......@@ -1595,7 +1599,7 @@ DeadLockCheck(SHM_QUEUE *lockQueue, LOCK *findlock, bool skip_check)
*
* The lock we are waiting for is already in MyProc->lockQueue so we
* need to skip it here. We are trying to find it in someone
* else's lockQueue.
* else's lockQueue. bjm
*/
if (lock == findlock && !skip_check)
return true;
......@@ -1625,7 +1629,7 @@ DeadLockCheck(SHM_QUEUE *lockQueue, LOCK *findlock, bool skip_check)
*
* Basically, the test is, "Do we both hold some lock on
* findlock, and we are both waiting in the lock
* queue?"
* queue?" bjm
*/
Assert(skip_check);
......@@ -1672,7 +1676,7 @@ DeadLockCheck(SHM_QUEUE *lockQueue, LOCK *findlock, bool skip_check)
* hold locks and are waiting. Now we check for
* cases where we have two or more tables in a
* deadlock. We do this by continuing to search
* for someone holding a lock
* for someone holding a lock bjm
*/
if (DeadLockCheck(&(proc->lockQueue), findlock, false))
return true;
......
......@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.52 1999/03/28 20:32:26 vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.53 1999/04/30 02:04:51 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -46,7 +46,7 @@
* This is so that we can support more backends. (system-wide semaphore
* sets run out pretty fast.) -ay 4/95
*
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.52 1999/03/28 20:32:26 vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.53 1999/04/30 02:04:51 momjian Exp $
*/
#include <sys/time.h>
#include <unistd.h>
......@@ -516,8 +516,7 @@ ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */
* In a full queue, we would have a reader holding a lock, then a writer
* gets the lock, then a bunch of readers, made up of readers who
* could not share the first readlock because a writer was waiting,
* and new readers arriving while the writer had the lock.
*
* and new readers arriving while the writer had the lock. bjm
*/
proc = (PROC *) MAKE_PTR(waitQueue->links.prev);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment