mirror of
https://github.com/postgres/postgres.git
synced 2025-07-26 01:22:12 +03:00
Fix nested error handling in PG_FINALLY
We need to pop the error stack before running the user-supplied PG_FINALLY code. Otherwise an error in the cleanup code would end up at the same sigsetjmp() invocation and result in an infinite error handling loop. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/95a822c3-728b-af0e-d7e5-71890507ae0c%402ndquadrant.com
This commit is contained in:
@ -338,14 +338,16 @@ extern PGDLLIMPORT ErrorContextCallback *error_context_stack;
|
||||
} \
|
||||
else \
|
||||
_do_rethrow = true; \
|
||||
{
|
||||
{ \
|
||||
PG_exception_stack = _save_exception_stack; \
|
||||
error_context_stack = _save_context_stack
|
||||
|
||||
#define PG_END_TRY() \
|
||||
} \
|
||||
PG_exception_stack = _save_exception_stack; \
|
||||
error_context_stack = _save_context_stack; \
|
||||
if (_do_rethrow) \
|
||||
PG_RE_THROW(); \
|
||||
PG_exception_stack = _save_exception_stack; \
|
||||
error_context_stack = _save_context_stack; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user