Index: src/backend/utils/mmgr/mcxt.c =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/utils/mmgr/mcxt.c,v retrieving revision 1.35 diff -c -c -r1.35 mcxt.c *** src/backend/utils/mmgr/mcxt.c 10 Nov 2002 02:17:25 -0000 1.35 --- src/backend/utils/mmgr/mcxt.c 11 Nov 2002 04:48:27 -0000 *************** *** 460,466 **** * function is called too many times, so we have a separate version. */ void * ! MemoryContextAllocZero(MemoryContext context, Size size) { void *ret; --- 460,466 ---- * function is called too many times, so we have a separate version. */ void * ! MemoryContextAllocZero(MemoryContext context, Size size, bool use_libc) { void *ret; *************** *** 471,477 **** (unsigned long) size); ret = (*context->methods->alloc) (context, size); ! MemSet(ret, 0, size); return ret; } --- 471,477 ---- (unsigned long) size); ret = (*context->methods->alloc) (context, size); ! MemSetLoop(ret, 0, size, use_libc); return ret; } Index: src/include/c.h =================================================================== RCS file: /cvsroot/pgsql-server/src/include/c.h,v retrieving revision 1.131 diff -c -c -r1.131 c.h *** src/include/c.h 11 Nov 2002 03:02:19 -0000 1.131 --- src/include/c.h 11 Nov 2002 04:48:33 -0000 *************** *** 579,601 **** * * bjm 2002-10-08 */ ! #define MemSet(start, val, len) \ do \ { \ int32 * _start = (int32 *) (start); \ int _val = (val); \ Size _len = (len); \ \ ! if ((( ((long) _start) | _len) & INT_ALIGN_MASK) == 0 && \ ! _val == 0 && \ ! _len <= MEMSET_LOOP_LIMIT) \ { \ int32 * _stop = (int32 *) ((char *) _start + _len); \ while (_start < _stop) \ *_start++ = 0; \ } \ else \ ! memset((char *) _start, _val, _len); \ } while (0) #define MEMSET_LOOP_LIMIT 1024 --- 579,610 ---- * * bjm 2002-10-08 */ ! #define MemSetTest(val, len) \ ! ( ((len) & INT_ALIGN_MASK) == 0 && \ ! (len) <= MEMSET_LOOP_LIMIT && \ ! (val) == 0 ) ! ! #define MemSetLoop(start, val, len, use_libc) \ do \ { \ int32 * _start = (int32 *) (start); \ int _val = (val); \ Size _len = (len); \ \ ! if (!use_libc && ((long) _start & INT_ALIGN_MASK) == 0 ) \ { \ int32 * _stop = (int32 *) ((char *) _start + _len); \ while (_start < _stop) \ *_start++ = 0; \ } \ else \ ! memset((char *) _start, _val, _len); \ ! } while (0) ! ! #define MemSet(start, val, len) \ ! do \ ! { \ ! MemSetLoop(start, val, len, MemSetTest(val, len)); \ } while (0) #define MEMSET_LOOP_LIMIT 1024 Index: src/include/utils/palloc.h =================================================================== RCS file: /cvsroot/pgsql-server/src/include/utils/palloc.h,v retrieving revision 1.22 diff -c -c -r1.22 palloc.h *** src/include/utils/palloc.h 10 Nov 2002 02:17:25 -0000 1.22 --- src/include/utils/palloc.h 11 Nov 2002 04:48:35 -0000 *************** *** 46,56 **** * 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); --- 46,57 ---- * Fundamental memory-allocation operations (more are in utils/memutils.h) */ extern void *MemoryContextAlloc(MemoryContext context, Size size); ! extern void *MemoryContextAllocZero(MemoryContext context, Size size, bool use_libc); #define palloc(sz) MemoryContextAlloc(CurrentMemoryContext, (sz)) ! #define palloc0(sz) MemoryContextAllocZero(CurrentMemoryContext, (sz), \ ! MemSetTest(0, (sz))) extern void pfree(void *pointer);