1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-19 13:42:17 +03:00

Prevent tv_sec from becoming negative in connection timeout code.

This commit is contained in:
Bruce Momjian
2002-10-11 04:12:14 +00:00
parent c2311337f0
commit 6a7bb0afbc
6 changed files with 68 additions and 27 deletions

View File

@@ -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;
}

View File

@@ -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 $
*
*-------------------------------------------------------------------------
*/
@@ -452,6 +452,29 @@ MemoryContextAlloc(MemoryContext context, Size size)
return (*context->methods->alloc) (context, 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.

View File

@@ -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))
@@ -282,11 +300,6 @@ typedef struct Node
* ----------------------------------------------------------------
*/
/*
* nodes/nodes.c
*/
extern Node *newNode(Size size, NodeTag tag);
/*
* nodes/{outfuncs.c,print.c}
*/

View File

@@ -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);

View File

@@ -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;
}
}