diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.shlib | 8 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lock.c | 14 | ||||
-rw-r--r-- | src/backend/storage/lmgr/proc.c | 7 |
3 files changed, 16 insertions, 13 deletions
diff --git a/src/Makefile.shlib b/src/Makefile.shlib index c35bf8d825b..889f24b8325 100644 --- a/src/Makefile.shlib +++ b/src/Makefile.shlib @@ -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 diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 2f822add66d..4c387643742 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -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; diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index cc5233b0764..229a78587cb 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -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); |