From: Tom Lane Date: Wed, 30 Aug 2000 21:19:32 +0000 (+0000) Subject: Back-patch fix to ensure we abort any open transaction at backend exit. X-Git-Tag: REL7_0_3~36 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=dae17e5ad1a138ca4a66a177ace00d6d0de9e50a;p=postgresql.git Back-patch fix to ensure we abort any open transaction at backend exit. --- diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 683f057f212..9811efd1bef 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.155 2000/05/21 02:23:30 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.155.2.1 2000/08/30 21:19:32 tgl Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -1452,14 +1452,14 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.155 $ $Date: 2000/05/21 02:23:30 $\n"); + puts("$Revision: 1.155.2.1 $ $Date: 2000/08/30 21:19:32 $\n"); } /* * Initialize the deferred trigger manager */ if (DeferredTriggerInit() != 0) - proc_exit(0); + goto normalexit; SetProcessingMode(NormalProcessing); @@ -1479,12 +1479,11 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) TPRINTF(TRACE_VERBOSE, "AbortCurrentTransaction"); AbortCurrentTransaction(); - InError = false; + if (ExitAfterAbort) - { - ProcReleaseLocks(); /* Just to be sure... */ - proc_exit(0); - } + goto errorexit; + + InError = false; } Warn_restart_ready = true; /* we can now handle elog(ERROR) */ @@ -1553,8 +1552,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) if (HandleFunctionRequest() == EOF) { /* lost frontend connection during F message input */ - pq_close(); - proc_exit(0); + goto normalexit; } break; @@ -1608,11 +1606,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) */ case 'X': case EOF: - if (!IsUnderPostmaster) - ShutdownXLOG(); - pq_close(); - proc_exit(0); - break; + goto normalexit; default: elog(ERROR, "unknown frontend message was received"); @@ -1642,10 +1636,20 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) if (IsUnderPostmaster) NullCommand(Remote); } - } /* infinite for-loop */ + } /* end of main loop */ + +normalexit: + ExitAfterAbort = true; /* ensure we will exit if elog during abort */ + AbortOutOfAnyTransaction(); + if (!IsUnderPostmaster) + ShutdownXLOG(); + +errorexit: + pq_close(); + ProcReleaseLocks(); /* Just to be sure... */ + proc_exit(0); - proc_exit(0); /* shouldn't get here... */ - return 1; + return 1; /* keep compiler quiet */ } #ifndef HAVE_GETRUSAGE