diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2021-10-22 16:43:38 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2021-10-22 16:43:38 -0400 |
| commit | 2e01d050d989d67f491349018a09574427d1d0ba (patch) | |
| tree | b5455bc753b6918bdf4482218ffe3afb9a7de3e7 /src/include/lib/simplehash.h | |
| parent | 476006023538730d2291125b883bfe07d03f3dfa (diff) | |
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
Diffstat (limited to 'src/include/lib/simplehash.h')
| -rw-r--r-- | src/include/lib/simplehash.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/include/lib/simplehash.h b/src/include/lib/simplehash.h index 3d3273a6bbb..e70d5a3714f 100644 --- a/src/include/lib/simplehash.h +++ b/src/include/lib/simplehash.h @@ -55,6 +55,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" @@ -218,7 +223,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__) @@ -247,7 +253,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 */ @@ -532,10 +538,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. |
