aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/parser/scan.c4
-rw-r--r--src/backend/storage/lmgr/proc.c37
-rw-r--r--src/pl/plpgsql/src/gram.c2
-rw-r--r--src/pl/plpgsql/src/scan.c2
4 files changed, 22 insertions, 23 deletions
diff --git a/src/backend/parser/scan.c b/src/backend/parser/scan.c
index 528cd7f1cde..ad0f71a5cc5 100644
--- a/src/backend/parser/scan.c
+++ b/src/backend/parser/scan.c
@@ -1,7 +1,7 @@
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
- * $Header: /cvsroot/pgsql/src/backend/parser/Attic/scan.c,v 1.31 1998/10/13 17:26:50 scrappy Exp $
+ * /master/usr.bin/lex/skel.c,v 1.3 1997/09/25 00:10:23 jch Exp
*/
#define FLEX_SCANNER
@@ -556,7 +556,7 @@ char *yytext;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/Attic/scan.c,v 1.31 1998/10/13 17:26:50 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/scan.c,v 1.32 1998/12/18 19:45:36 momjian Exp $
*
*-------------------------------------------------------------------------
*/
diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c
index 650500de48b..74adf58a4de 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.43 1998/09/01 04:32:02 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.44 1998/12/18 19:45:37 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.43 1998/09/01 04:32:02 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.44 1998/12/18 19:45:37 momjian Exp $
*/
#include <sys/time.h>
#include <unistd.h>
@@ -77,7 +77,7 @@
#include "storage/proc.h"
#include "utils/trace.h"
-static void HandleDeadLock(int sig);
+static void HandleDeadLock(void);
static PROC *ProcWakeup(PROC *proc, int errType);
#define DeadlockCheckTimer pg_options[OPT_DEADLOCKTIMEOUT]
@@ -154,8 +154,6 @@ InitProcess(IPCKey key)
* Routine called if deadlock timer goes off. See ProcSleep()
* ------------------
*/
- pqsignal(SIGALRM, HandleDeadLock);
-
SpinAcquire(ProcStructLock);
/* attach to the free list */
@@ -449,9 +447,9 @@ ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */
TransactionId xid) /* needed by user locks, see below */
{
int i;
+ bool deadlock_checked = false;
PROC *proc;
- struct itimerval timeval,
- dummy;
+ struct timeval timeval;
/*
* If the first entries in the waitQueue have a greater priority than
@@ -523,17 +521,26 @@ ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */
* to 0.
* --------------
*/
- MemSet(&timeval, 0, sizeof(struct itimerval));
- timeval.it_value.tv_sec = \
+ MemSet(&timeval, 0, sizeof(struct timeval));
+ timeval.tv_sec = \
(DeadlockCheckTimer ? DeadlockCheckTimer : DEADLOCK_CHECK_TIMER);
do
{
+ int expire;
+
MyProc->errType = NO_ERROR; /* reset flag after deadlock check */
- if (setitimer(ITIMER_REAL, &timeval, &dummy))
+ if ((expire = select(0, NULL, NULL, NULL,
+ (deadlock_checked == false) ? &timeval : NULL)) == -1)
elog(FATAL, "ProcSleep: Unable to set timer for process wakeup");
+ if (expire == 0 /* timeout reached */ && deadlock_checked == false)
+ {
+ HandleDeadLock();
+ deadlock_checked = true;
+ }
+
/* --------------
* if someone wakes us between SpinRelease and IpcSemaphoreLock,
* IpcSemaphoreLock will not block. The wakeup is "saved" by
@@ -545,14 +552,6 @@ ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */
} while (MyProc->errType == STATUS_NOT_FOUND); /* sleep after deadlock
* check */
- /* ---------------
- * We were awoken before a timeout - now disable the timer
- * ---------------
- */
- timeval.it_value.tv_sec = 0;
- if (setitimer(ITIMER_REAL, &timeval, &dummy))
- elog(FATAL, "ProcSleep: Unable to diable timer for process wakeup");
-
/* ----------------
* We were assumed to be in a critical section when we went
* to sleep.
@@ -695,7 +694,7 @@ ProcAddLock(SHM_QUEUE *elem)
* --------------------
*/
static void
-HandleDeadLock(int sig)
+HandleDeadLock()
{
LOCK *mywaitlock;
diff --git a/src/pl/plpgsql/src/gram.c b/src/pl/plpgsql/src/gram.c
index e24b335fa8a..d6a11dda3eb 100644
--- a/src/pl/plpgsql/src/gram.c
+++ b/src/pl/plpgsql/src/gram.c
@@ -65,7 +65,7 @@
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/gram.c,v 1.1 1998/10/28 17:07:17 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/gram.c,v 1.2 1998/12/18 19:45:38 momjian Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
diff --git a/src/pl/plpgsql/src/scan.c b/src/pl/plpgsql/src/scan.c
index 74e6af96251..e0054dc316f 100644
--- a/src/pl/plpgsql/src/scan.c
+++ b/src/pl/plpgsql/src/scan.c
@@ -635,7 +635,7 @@ char *yytext_ptr;
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.c,v 1.1 1998/10/28 17:07:17 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.c,v 1.2 1998/12/18 19:45:38 momjian Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*