diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/nodes/nodes.c | 14 | ||||
-rw-r--r-- | src/backend/utils/mmgr/mcxt.c | 25 | ||||
-rw-r--r-- | src/include/nodes/nodes.h | 25 | ||||
-rw-r--r-- | src/include/utils/palloc.h | 5 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-connect.c | 7 |
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; } } |