aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-10-11 04:12:14 +0000
committerBruce Momjian <bruce@momjian.us>2002-10-11 04:12:14 +0000
commit6a7bb0afbcab1ac3f1e9bbcb536bc7865f4503e6 (patch)
tree9fec5490cf4e27e39e37695f0226735a8ed7269c /src
parentc2311337f0bff953e60e8f65e759de041e4f2bc4 (diff)
downloadpostgresql-6a7bb0afbcab1ac3f1e9bbcb536bc7865f4503e6.tar.gz
postgresql-6a7bb0afbcab1ac3f1e9bbcb536bc7865f4503e6.zip
Prevent tv_sec from becoming negative in connection timeout code.
Diffstat (limited to 'src')
-rw-r--r--src/backend/nodes/nodes.c14
-rw-r--r--src/backend/utils/mmgr/mcxt.c25
-rw-r--r--src/include/nodes/nodes.h25
-rw-r--r--src/include/utils/palloc.h5
-rw-r--r--src/interfaces/libpq/fe-connect.c7
5 files changed, 54 insertions, 22 deletions
diff --git a/src/backend/nodes/nodes.c b/src/backend/nodes/nodes.c
index 73c9a1b2b4c..4e694bd09d0 100644
--- a/src/backend/nodes/nodes.c
+++ b/src/backend/nodes/nodes.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/nodes.c,v 1.15 2002/06/20 20:29:29 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/nodes.c,v 1.16 2002/10/11 04:12:14 momjian Exp $
*
* HISTORY
* Andrew Yu Oct 20, 1994 file creation
@@ -28,15 +28,5 @@
* macro makeNode. eg. to create a Resdom node, use makeNode(Resdom)
*
*/
-Node *
-newNode(Size size, NodeTag tag)
-{
- Node *newNode;
+Node *newNodeMacroHolder;
- Assert(size >= sizeof(Node)); /* need the tag, at least */
-
- newNode = (Node *) palloc(size);
- MemSet((char *) newNode, 0, size);
- newNode->type = tag;
- return newNode;
-}
diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index 6b77736a3bc..da666076627 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -14,7 +14,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.32 2002/08/12 00:36:12 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.33 2002/10/11 04:12:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -453,6 +453,29 @@ MemoryContextAlloc(MemoryContext context, Size size)
}
/*
+ * MemoryContextAllocZero
+ * Like MemoryContextAlloc, but clears allocated memory
+ *
+ * We could just call MemoryContextAlloc then clear the memory, but this
+ * function is called too many times, so we have a separate version.
+ */
+void *
+MemoryContextAllocZero(MemoryContext context, Size size)
+{
+ void *ret;
+
+ AssertArg(MemoryContextIsValid(context));
+
+ if (!AllocSizeIsValid(size))
+ elog(ERROR, "MemoryContextAllocZero: invalid request size %lu",
+ (unsigned long) size);
+
+ ret = (*context->methods->alloc) (context, size);
+ MemSet(ret, 0, size);
+ return ret;
+}
+
+/*
* pfree
* Release an allocated chunk.
*/
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index ee472203e68..4b6a3c04eb5 100644
--- a/src/include/nodes/nodes.h
+++ b/src/include/nodes/nodes.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: nodes.h,v 1.118 2002/08/31 22:10:47 tgl Exp $
+ * $Id: nodes.h,v 1.119 2002/10/11 04:12:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -261,6 +261,24 @@ typedef struct Node
#define nodeTag(nodeptr) (((Node*)(nodeptr))->type)
+/*
+ * There is no way to dereference the palloc'ed pointer to assign the
+ * tag, and return the pointer itself, so we need a holder variable.
+ * Fortunately, this function isn't recursive so we just define
+ * a global variable for this purpose.
+ */
+extern Node *newNodeMacroHolder;
+
+#define newNode(size, tag) \
+( \
+ AssertMacro((size) >= sizeof(Node)), /* need the tag, at least */ \
+\
+ newNodeMacroHolder = (Node *) palloc0(size), \
+ newNodeMacroHolder->type = (tag), \
+ newNodeMacroHolder \
+)
+
+
#define makeNode(_type_) ((_type_ *) newNode(sizeof(_type_),T_##_type_))
#define NodeSetTag(nodeptr,t) (((Node*)(nodeptr))->type = (t))
@@ -283,11 +301,6 @@ typedef struct Node
*/
/*
- * nodes/nodes.c
- */
-extern Node *newNode(Size size, NodeTag tag);
-
-/*
* nodes/{outfuncs.c,print.c}
*/
extern char *nodeToString(void *obj);
diff --git a/src/include/utils/palloc.h b/src/include/utils/palloc.h
index 168ed301977..c1cb6f69c42 100644
--- a/src/include/utils/palloc.h
+++ b/src/include/utils/palloc.h
@@ -21,7 +21,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: palloc.h,v 1.19 2002/06/20 20:29:53 momjian Exp $
+ * $Id: palloc.h,v 1.20 2002/10/11 04:12:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -46,9 +46,12 @@ extern DLLIMPORT MemoryContext CurrentMemoryContext;
* Fundamental memory-allocation operations (more are in utils/memutils.h)
*/
extern void *MemoryContextAlloc(MemoryContext context, Size size);
+extern void *MemoryContextAllocZero(MemoryContext context, Size size);
#define palloc(sz) MemoryContextAlloc(CurrentMemoryContext, (sz))
+#define palloc0(sz) MemoryContextAllocZero(CurrentMemoryContext, (sz))
+
extern void pfree(void *pointer);
extern void *repalloc(void *pointer, Size size);
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index cbb29fa4a54..114f23f7974 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.206 2002/10/03 17:09:42 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.207 2002/10/11 04:12:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1131,7 +1131,10 @@ connectDBComplete(PGconn *conn)
return 0;
}
- remains.tv_sec = finish_time - current_time;
+ if (finish_time > current_time)
+ remains.tv_sec = finish_time - current_time;
+ else
+ remains.tv_sec = 0;
remains.tv_usec = 0;
}
}