From: Andres Freund Date: Sun, 10 Jan 2010 20:48:27 +0000 (+0100) Subject: Use an enum instead of plain typedefs for HS' conflict_mode. Saves us X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=0a3b06aa84cbb8a025e4975d1a1cb30a4e4d19bc;p=users%2Fandresfreund%2Fpostgres.git Use an enum instead of plain typedefs for HS' conflict_mode. Saves us the trouble to test for other values. --- diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 9cb28f7267..48b0c08fb3 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -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; diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 227b9cca53..01c38ec105 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -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]; diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 7daa5e8827..15316348c5 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -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 diff --git a/src/include/storage/procarray.h b/src/include/storage/procarray.h index 314491d8cc..042a95ee74 100644 --- a/src/include/storage/procarray.h +++ b/src/include/storage/procarray.h @@ -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); diff --git a/src/include/storage/standby.h b/src/include/storage/standby.h index 7a1c41fe5c..ac950b751d 100644 --- a/src/include/storage/standby.h +++ b/src/include/storage/standby.h @@ -20,12 +20,14 @@ 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);