Skip to content

Commit 4569715

Browse files
committed
Fix unlikely shared memory leak after failure in dshash_create().
Tidy-up for commit 8c0d7ba, based on a complaint from Andres Freund. Author: Thomas Munro Reviewed-By: Andres Freund Discussion: https://postgr.es/m/20170823054644.efuzftxjpfi6wwqs%40alap3.anarazel.de
1 parent 20fbf25 commit 4569715

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/backend/lib/dshash.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,20 @@ dshash_create(dsa_area *area, const dshash_parameters *params, void *arg)
243243
*/
244244
hash_table->control->size_log2 = DSHASH_NUM_PARTITIONS_LOG2;
245245
hash_table->control->buckets =
246-
dsa_allocate(area, sizeof(dsa_pointer) * DSHASH_NUM_PARTITIONS);
246+
dsa_allocate_extended(area,
247+
sizeof(dsa_pointer) * DSHASH_NUM_PARTITIONS,
248+
DSA_ALLOC_NO_OOM | DSA_ALLOC_ZERO);
249+
if (!DsaPointerIsValid(hash_table->control->buckets))
250+
{
251+
dsa_free(area, control);
252+
ereport(ERROR,
253+
(errcode(ERRCODE_OUT_OF_MEMORY),
254+
errmsg("out of memory"),
255+
errdetail("Failed on DSA request of size %zu.",
256+
sizeof(dsa_pointer) * DSHASH_NUM_PARTITIONS)));
257+
}
247258
hash_table->buckets = dsa_get_address(area,
248259
hash_table->control->buckets);
249-
memset(hash_table->buckets, 0, sizeof(dsa_pointer) * DSHASH_NUM_PARTITIONS);
250260

251261
return hash_table;
252262
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy