From 9acb85597f1223ac26a5b19a9345849c43d0ff54 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 16 Feb 2017 12:45:53 -0500 Subject: [PATCH] Add new function dsa_allocate0. This does the same thing as dsa_allocate, except that the memory is guaranteed to be zero-filled on return. Dilip Kumar, adjusted by me. --- src/backend/utils/mmgr/dsa.c | 16 ++++++++++++++++ src/include/utils/dsa.h | 1 + 2 files changed, 17 insertions(+) diff --git a/src/backend/utils/mmgr/dsa.c b/src/backend/utils/mmgr/dsa.c index 7dc43f1ea7..3eb3d4d9a4 100644 --- a/src/backend/utils/mmgr/dsa.c +++ b/src/backend/utils/mmgr/dsa.c @@ -755,6 +755,22 @@ dsa_allocate(dsa_area *area, Size size) return alloc_object(area, size_class); } +/* + * As dsa_allocate, but zeroes the allocated memory. + */ +dsa_pointer +dsa_allocate0(dsa_area *area, Size size) +{ + dsa_pointer dp; + char *object; + + dp = dsa_allocate(area, size); + object = dsa_get_address(area, dp); + memset(object, 0, size); + + return dp; +} + /* * Free memory obtained with dsa_allocate. */ diff --git a/src/include/utils/dsa.h b/src/include/utils/dsa.h index bb634e77cd..3fd9bbd3a5 100644 --- a/src/include/utils/dsa.h +++ b/src/include/utils/dsa.h @@ -106,6 +106,7 @@ extern void dsa_set_size_limit(dsa_area *area, Size limit); extern Size dsa_minimum_size(void); extern dsa_handle dsa_get_handle(dsa_area *area); extern dsa_pointer dsa_allocate(dsa_area *area, Size size); +extern dsa_pointer dsa_allocate0(dsa_area *area, Size size); extern void dsa_free(dsa_area *area, dsa_pointer dp); extern void *dsa_get_address(dsa_area *area, dsa_pointer dp); extern void dsa_trim(dsa_area *area); -- 2.40.0