ExecAppendAsyncEventWait() in REL_14_STABLE can corrupt PG_exception_stack

Alexander Pyhalov <a.pyhalov@postgrespro.ru>

From: Alexander Pyhalov <a.pyhalov@postgrespro.ru>
To: Pgsql Hackers <pgsql-hackers@postgresql.org>
Date: 2024-02-23T10:21:14Z
Lists: pgsql-hackers

Attachments

Hi.

Recent commit 555276f8594087ba15e0d58e38cd2186b9f39f6d introduced final 
cleanup of node->as_eventset in ExecAppendAsyncEventWait().
Unfortunately, now this function can return in the middle of TRY/FINALLY 
block, without restoring PG_exception_stack.

We found this while working on our FDW. Unfortunately, I couldn't 
reproduce the issue with postgres_fdw, but it seems it is also affected.

The following patch heals the issue.

-- l
Best regards,
Alexander Pyhalov,
Postgres Professional

Commits

  1. Fix bogus coding in ExecAppendAsyncEventWait().

  2. Fix resource leak when a FDW's ForeignAsyncRequest function fails

  3. postgres_fdw: Fix handling of pending asynchronous requests.

  4. Add support for asynchronous execution.