postgres.git / summary / log / commit / refs
commit 162aa47c31a0236d68b68d65df3fef0079af0d48
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Wed Jul 05 10:13:13 2023 +0000
First released in: 17.0, 11.21, 12.16, 13.12, 14.9, 15.4, 16.0
Fix leak of LLVM "fatal-on-oom" section counter.
llvm_release_context() called llvm_enter_fatal_on_oom(), but was missing
the corresponding llvm_leave_fatal_on_oom() call. As a result, if JIT was
used at all, we were almost always in the "fatal-on-oom" state.
It only makes a difference if you use an extension written in C++, and
run out of memory in a C++ 'new' call. In that case, you would get a
PostgreSQL FATAL error, instead of the default behavior of throwing a
C++ exception.
Back-patch to all supported versions.
Reviewed-by: Daniel Gustafsson
Discussion: https://www.postgresql.org/message-id/54b78cca-bc84-dad8-4a7e-5b56f764fab5@iki.fi
src/backend/jit/llvm/llvmjit.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
index 537e0c448a1..67ebf6248e9 100644
--- a/src/backend/jit/llvm/llvmjit.c
+++ b/src/backend/jit/llvm/llvmjit.c
@@ -233,6 +233,8 @@ llvm_release_context(JitContext *context)
pfree(jit_handle);
}
+
+ llvm_leave_fatal_on_oom();
}
/*
[parent: 1b4f1c6f8a6c]