]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Back-patch fix to ensure we abort any open transaction at backend exit.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 30 Aug 2000 21:19:32 +0000 (21:19 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 30 Aug 2000 21:19:32 +0000 (21:19 +0000)
src/backend/tcop/postgres.c

index 683f057f21266894bba16fc4da457085ba061eb1..9811efd1befc50533d9b729c367870e1ab6fa2e9 100644 (file)
@@ -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