Use an enum instead of plain typedefs for HS' conflict_mode. Saves us
authorAndres Freund <[email protected]>
Sun, 10 Jan 2010 20:48:27 +0000 (21:48 +0100)
committerAndres Freund <[email protected]>
Tue, 12 Jan 2010 02:22:18 +0000 (03:22 +0100)
the trouble to test for other values.

src/backend/storage/ipc/procarray.c
src/backend/storage/ipc/standby.c
src/backend/storage/lmgr/proc.c
src/include/storage/procarray.h
src/include/storage/standby.h

index 9cb28f7267c8fddb8a7344bd3f271438eef26f18..48b0c08fb368755026b03489c3674de83d2231a8 100644 (file)
@@ -377,7 +377,7 @@ ProcArrayClearTransaction(PGPROC *proc)
    proc->xid = InvalidTransactionId;
    proc->lxid = InvalidLocalTransactionId;
    proc->xmin = InvalidTransactionId;
-   proc->recoveryConflictMode = 0;
+   proc->recoveryConflictMode = CONFLICT_MODE_NOT_SET;
 
    /* redundant, but just in case */
    proc->vacuumFlags &= ~PROC_VACUUM_STATE_MASK;
@@ -1665,7 +1665,7 @@ GetConflictingVirtualXIDs(TransactionId limitXmin, Oid dbOid,
        if (proc->pid == 0)
            continue;
 
-       if (skipExistingConflicts && proc->recoveryConflictMode > 0)
+       if (skipExistingConflicts && proc->recoveryConflictMode > CONFLICT_MODE_NOT_SET)
            continue;
 
        if (!OidIsValid(dbOid) ||
@@ -1704,7 +1704,7 @@ GetConflictingVirtualXIDs(TransactionId limitXmin, Oid dbOid,
  * Returns pid of the process signaled, or 0 if not found.
  */
 pid_t
-CancelVirtualTransaction(VirtualTransactionId vxid, int cancel_mode)
+CancelVirtualTransaction(VirtualTransactionId vxid, recovery_conflict_mode cancel_mode)
 {
    ProcArrayStruct *arrayP = procArray;
    int         index;
index 227b9cca53196975182ad842b1de73816b37b81d..01c38ec10553af67caf1eedb0b80fe9c0b0491eb 100644 (file)
@@ -164,7 +164,7 @@ WaitExceedsMaxStandbyDelay(void)
  */
 void
 ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
-                                      char *reason, int cancel_mode)
+                                      char *reason, recovery_conflict_mode cancel_mode)
 {
    char        waitactivitymsg[100];
 
index 7daa5e88274c5db01721ca66a160bd883ea35366..15316348c5eb8f70fd8a914ff154d31d3fbdce5c 100644 (file)
@@ -45,6 +45,7 @@
 #include "storage/proc.h"
 #include "storage/procarray.h"
 #include "storage/spin.h"
+#include "storage/standby.h"
 
 
 /* GUC variables */
@@ -318,7 +319,7 @@ InitProcess(void)
    MyProc->waitProcLock = NULL;
    for (i = 0; i < NUM_LOCK_PARTITIONS; i++)
        SHMQueueInit(&(MyProc->myProcLocks[i]));
-   MyProc->recoveryConflictMode = 0;
+   MyProc->recoveryConflictMode = CONFLICT_MODE_NOT_SET;
 
    /*
     * We might be reusing a semaphore that belonged to a failed process. So
index 314491d8ccde7404a601b54cfb6fad74e039e59c..042a95ee74bf20ee4f69aea878155263ed1d153e 100644 (file)
@@ -59,7 +59,7 @@ extern VirtualTransactionId *GetCurrentVirtualXIDs(TransactionId limitXmin,
 extern VirtualTransactionId *GetConflictingVirtualXIDs(TransactionId limitXmin,
                    Oid dbOid, bool skipExistingConflicts);
 extern pid_t CancelVirtualTransaction(VirtualTransactionId vxid,
-                        int cancel_mode);
+                                     recovery_conflict_mode cancel_mode);
 
 extern int CountActiveBackends(void);
 extern int CountDBBackends(Oid databaseid);
index 7a1c41fe5ca09ea98d754d7dc6c6b6194e9ad66a..ac950b751dfbfa99d25777910a018869f4fa19aa 100644 (file)
 extern int vacuum_defer_cleanup_age;
 
 /* cancel modes for ResolveRecoveryConflictWithVirtualXIDs */
-#define CONFLICT_MODE_NOT_SET      0
-#define CONFLICT_MODE_ERROR            1   /* Conflict can be resolved by canceling query */
-#define CONFLICT_MODE_FATAL            2   /* Conflict can only be resolved by disconnecting session */
+typedef enum {
+   CONFLICT_MODE_NOT_SET, /* No conflict */
+   CONFLICT_MODE_FATAL, /* Conflict can only be resolved by disconnecting session */
+   CONFLICT_MODE_ERROR /* Conflict can be resolved by canceling query */
+} recovery_conflict_mode;
 
 extern void ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
-                                      char *reason, int cancel_mode);
+                                      char *reason, recovery_conflict_mode cancel_mode);
 
 extern void InitRecoveryTransactionEnvironment(void);
 extern void ShutdownRecoveryTransactionEnvironment(void);