]> granicus.if.org Git - postgresql/commit
Fix inconsistent out-of-memory error reporting in dsa.c.
authorThomas Munro <tmunro@postgresql.org>
Sun, 24 Feb 2019 21:54:12 +0000 (10:54 +1300)
committerThomas Munro <tmunro@postgresql.org>
Sun, 24 Feb 2019 22:12:57 +0000 (11:12 +1300)
commit50ae619035be84e084c4f59b59598a03ba38286c
tree1ee5b5dfaca7ef3a3a9f920db848dc312c42b5a5
parentde94ed89d5b013acf9729ac04e52166bbb8ca736
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
src/backend/utils/mmgr/dsa.c