aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-10-22 16:43:38 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2021-10-22 16:43:38 -0400
commit974aedcea46dfd0119eea2fbb2eeacd232596f05 (patch)
tree976e9e65f0d47934b1220d297550f20dedd5ec72
parent2acc84c6fd299125702c8a8af13820abcc0d4891 (diff)
downloadpostgresql-974aedcea46dfd0119eea2fbb2eeacd232596f05.tar.gz
postgresql-974aedcea46dfd0119eea2fbb2eeacd232596f05.zip
Fix frontend version of sh_error() in simplehash.h.
The code does not expect sh_error() to return, but the patch that made this header usable in frontend didn't get that memo. While here, plaster unlikely() on the tests that decide whether to invoke sh_error(), and add our standard copyright notice. Noted by Andres Freund. Back-patch to v13 where this frontend support came in. Discussion: https://postgr.es/m/0D54435C-1199-4361-9D74-2FBDCF8EA164@anarazel.de
-rw-r--r--src/include/lib/simplehash.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/include/lib/simplehash.h b/src/include/lib/simplehash.h
index 60ab472540d..7dba5437897 100644
--- a/src/include/lib/simplehash.h
+++ b/src/include/lib/simplehash.h
@@ -86,6 +86,11 @@
* presence is relevant to determine whether a lookup needs to continue
* looking or is done - buckets following a deleted element are shifted
* backwards, unless they're empty or already at their optimal position.
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/lib/simplehash.h
*/
#include "port/pg_bitutils.h"
@@ -288,7 +293,8 @@ SH_SCOPE void SH_STAT(SH_TYPE * tb);
#define SIMPLEHASH_H
#ifdef FRONTEND
-#define sh_error(...) pg_log_error(__VA_ARGS__)
+#define sh_error(...) \
+ do { pg_log_fatal(__VA_ARGS__); exit(1); } while(0)
#define sh_log(...) pg_log_info(__VA_ARGS__)
#else
#define sh_error(...) elog(ERROR, __VA_ARGS__)
@@ -317,7 +323,7 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint64 newsize)
* Verify that allocation of ->data is possible on this platform, without
* overflowing Size.
*/
- if ((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= SIZE_MAX / 2)
+ if (unlikely((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= SIZE_MAX / 2))
sh_error("hash table too large");
/* now set size */
@@ -602,10 +608,8 @@ restart:
*/
if (unlikely(tb->members >= tb->grow_threshold))
{
- if (tb->size == SH_MAX_SIZE)
- {
+ if (unlikely(tb->size == SH_MAX_SIZE))
sh_error("hash table size exceeded");
- }
/*
* When optimizing, it can be very useful to print these out.