diff options
author | Tom Lane | 2000-08-30 21:19:32 +0000 |
---|---|---|
committer | Tom Lane | 2000-08-30 21:19:32 +0000 |
commit | dae17e5ad1a138ca4a66a177ace00d6d0de9e50a (patch) | |
tree | 1a3ed705f0d140ce01c0a9acceb9725c805820e1 | |
parent | a2661b57e132942e921904afed92234eec97ef2c (diff) |
Back-patch fix to ensure we abort any open transaction at backend exit.
-rw-r--r-- | src/backend/tcop/postgres.c | 40 |
1 files changed, 22 insertions, 18 deletions
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 |