Skip to content

Commit 8e9ad61

Browse files
author
Hiroshi Inoue
committed
Cancel request while waiting for a lock should try to wake
up sleeping processes.
1 parent a455ca4 commit 8e9ad61

File tree

1 file changed

+14
-12
lines changed
  • src/backend/storage/lmgr

1 file changed

+14
-12
lines changed

src/backend/storage/lmgr/proc.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.72 2000/04/12 17:15:38 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.72.2.1 2000/09/20 07:20:27 inoue Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -47,7 +47,7 @@
4747
* This is so that we can support more backends. (system-wide semaphore
4848
* sets run out pretty fast.) -ay 4/95
4949
*
50-
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.72 2000/04/12 17:15:38 momjian Exp $
50+
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.72.2.1 2000/09/20 07:20:27 inoue Exp $
5151
*/
5252
#include <sys/time.h>
5353
#include <unistd.h>
@@ -326,18 +326,20 @@ GetOffWaitqueue(PROC *proc)
326326
if (proc->links.next != INVALID_OFFSET)
327327
{
328328
int lockmode = proc->token;
329+
LOCK *waitLock = proc->waitLock;
329330

330-
Assert(proc->waitLock->waitProcs.size > 0);
331+
Assert(waitLock);
332+
Assert(waitLock->waitProcs.size > 0);
331333
SHMQueueDelete(&(proc->links));
332-
--proc->waitLock->waitProcs.size;
333-
Assert(proc->waitLock->nHolding > 0);
334-
Assert(proc->waitLock->nHolding > proc->waitLock->nActive);
335-
--proc->waitLock->nHolding;
336-
Assert(proc->waitLock->holders[lockmode] > 0);
337-
--proc->waitLock->holders[lockmode];
338-
if (proc->waitLock->activeHolders[lockmode] ==
339-
proc->waitLock->holders[lockmode])
340-
proc->waitLock->waitMask &= ~(1 << lockmode);
334+
--waitLock->waitProcs.size;
335+
Assert(waitLock->nHolding > 0);
336+
Assert(waitLock->nHolding > proc->waitLock->nActive);
337+
--waitLock->nHolding;
338+
Assert(waitLock->holders[lockmode] > 0);
339+
--waitLock->holders[lockmode];
340+
if (waitLock->activeHolders[lockmode] == waitLock->holders[lockmode])
341+
waitLock->waitMask &= ~(1 << lockmode);
342+
ProcLockWakeup(&(waitLock->waitProcs), LOCK_LOCKMETHOD(*waitLock), waitLock);
341343
getoffed = true;
342344
}
343345
SHMQueueElemInit(&(proc->links));

0 commit comments

Comments
 (0)