diff options
Diffstat (limited to 'src/backend/storage/ipc/sinval.c')
-rw-r--r-- | src/backend/storage/ipc/sinval.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/storage/ipc/sinval.c b/src/backend/storage/ipc/sinval.c index d9b16f84d19..4e69015fe4d 100644 --- a/src/backend/storage/ipc/sinval.c +++ b/src/backend/storage/ipc/sinval.c @@ -16,6 +16,7 @@ #include "access/xact.h" #include "miscadmin.h" +#include "nodes/memnodes.h" #include "storage/latch.h" #include "storage/sinvaladt.h" #include "utils/inval.h" @@ -182,6 +183,7 @@ ProcessCatchupInterrupt(void) * can just call AcceptInvalidationMessages() to do this. If we * aren't, we start and immediately end a transaction; the call to * AcceptInvalidationMessages() happens down inside transaction start. + * Be sure to preserve caller's memory context when we do that. * * It is awfully tempting to just call AcceptInvalidationMessages() * without the rest of the xact start/stop overhead, and I think that @@ -195,9 +197,14 @@ ProcessCatchupInterrupt(void) } else { + MemoryContext oldcontext = CurrentMemoryContext; + elog(DEBUG4, "ProcessCatchupEvent outside transaction"); StartTransactionCommand(); CommitTransactionCommand(); + /* Caller's context had better not have been transaction-local */ + Assert(MemoryContextIsValid(oldcontext)); + MemoryContextSwitchTo(oldcontext); } } } |