]> granicus.if.org Git - postgresql/commitdiff
hold interupts during LockWaitCancel().
authorHiroshi Inoue <inoue@tpf.co.jp>
Fri, 9 Mar 2001 06:36:32 +0000 (06:36 +0000)
committerHiroshi Inoue <inoue@tpf.co.jp>
Fri, 9 Mar 2001 06:36:32 +0000 (06:36 +0000)
src/backend/tcop/postgres.c

index da09437a8cafacc3a0731ea917f0894238488d07..fa0dbc13125112405cda39adc820283101aab271 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.208 2001/02/24 02:04:51 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.209 2001/03/09 06:36:32 inoue Exp $
  *
  * NOTES
  *       this is the "main" module of the postgres backend and
@@ -946,9 +946,13 @@ die(SIGNAL_ARGS)
                if (ImmediateInterruptOK && InterruptHoldoffCount == 0 &&
                        CritSectionCount == 0)
                {
+                       /* bump holdoff count to make ProcessInterrupts() a no-op */
+                       /* until we are done getting ready for it */
+                       InterruptHoldoffCount++;
                        DisableNotifyInterrupt();
                        /* Make sure HandleDeadLock won't run while shutting down... */
                        LockWaitCancel();
+                       InterruptHoldoffCount--;
                        ProcessInterrupts();
                }
        }
@@ -976,10 +980,19 @@ QueryCancelHandler(SIGNAL_ARGS)
                 * if we're waiting for input, however.
                 */
                if (ImmediateInterruptOK && InterruptHoldoffCount == 0 &&
-                       CritSectionCount == 0 && LockWaitCancel())
+                       CritSectionCount == 0)
                {
-                       DisableNotifyInterrupt();
-                       ProcessInterrupts();
+                       /* bump holdoff count to make ProcessInterrupts() a no-op */
+                       /* until we are done getting ready for it */
+                       InterruptHoldoffCount++;
+                       if (LockWaitCancel())
+                       {
+                               InterruptHoldoffCount--;
+                               DisableNotifyInterrupt();
+                               ProcessInterrupts();
+                       }
+                       else
+                               InterruptHoldoffCount--;
                }
        }
 
@@ -1680,7 +1693,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
        if (!IsUnderPostmaster)
        {
                puts("\nPOSTGRES backend interactive interface ");
-               puts("$Revision: 1.208 $ $Date: 2001/02/24 02:04:51 $\n");
+               puts("$Revision: 1.209 $ $Date: 2001/03/09 06:36:32 $\n");
        }
 
        /*