From: | Thomas Munro <tmunro(at)postgresql(dot)org> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Fix inconsistent out-of-memory error reporting in dsa.c. |
Date: | 2019-02-24 22:31:20 |
Message-ID: | E1gy2Iq-0007XB-50@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix inconsistent out-of-memory error reporting in dsa.c.
Commit 16be2fd1 introduced the flag DSA_ALLOC_NO_OOM to control whether
the DSA allocator would raise an error or return InvalidDsaPointer on
failure to allocate. One edge case was not handled correctly: if we
fail to allocate an internal "span" object for a large allocation, we
would always return InvalidDsaPointer regardless of the flag; a caller
not expecting that could then dereference a null pointer.
This is a plausible explanation for a one-off report of a segfault.
Remove a redundant pair of braces so that all three stanzas that handle
DSA_ALLOC_NO_OOM match in style, for visual consistency.
While fixing inconsistencies, if FreePageManagerGet() can't supply the
pages that our book-keeping says it should be able to supply, then we
should always report a FATAL error. Previously we treated that as a
regular allocation failure in one code path, but as a FATAL condition
in another.
Back-patch to 10, where dsa.c landed.
Author: Thomas Munro
Reported-by: Jakub Glapa
Discussion: https://postgr.es/m/CAEepm=2oPqXxyWQ-1o60tpOLrwkw=VpgNXqqF1VN2EyO9zKGQw@mail.gmail.com
Branch
------
REL_11_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/50ae619035be84e084c4f59b59598a03ba38286c
Modified Files
--------------
src/backend/utils/mmgr/dsa.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2019-02-24 22:31:36 | pgsql: Fix inconsistent out-of-memory error reporting in dsa.c. |
Previous Message | Thomas Munro | 2019-02-24 22:31:05 | pgsql: Fix inconsistent out-of-memory error reporting in dsa.c. |