130#define MAXNUMMESSAGES 4096
131#define MSGNUMWRAPAROUND (MAXNUMMESSAGES * 262144)
132#define CLEANUP_MIN (MAXNUMMESSAGES / 2)
133#define CLEANUP_QUANTUM (MAXNUMMESSAGES / 16)
134#define SIG_THRESHOLD (MAXNUMMESSAGES / 2)
135#define WRITE_QUANTUM 64
205#define NumProcStateSlots (MaxBackends + NUM_AUXILIARY_PROCS)
283 elog(
PANIC,
"unexpected MyProcNumber %d in SharedInvalBackendInit (max %d)",
298 elog(
ERROR,
"sinval slot for backend %d is already in use by process %d",
310 stateP->resetState =
false;
312 stateP->hasMessages =
false;
313 stateP->sendOnly = sendOnly;
348 stateP->resetState =
false;
351 for (
i =
segP->numProcs - 1;
i >= 0;
i--)
355 if (
i !=
segP->numProcs - 1)
361 elog(
PANIC,
"could not find entry in sinval array");
416 max =
segP->maxMsgNum;
425 segP->maxMsgNum = max;
435 for (
i = 0;
i <
segP->numProcs;
i++)
510 stateP->hasMessages =
false;
514 max =
segP->maxMsgNum;
525 stateP->resetState =
false;
553 if (
stateP->nextMsgNum >= max)
556 stateP->hasMessages =
true;
601 min =
segP->maxMsgNum;
605 for (
i = 0;
i <
segP->numProcs;
i++)
621 stateP->resetState =
true;
637 segP->minMsgNum = min;
648 for (
i = 0;
i <
segP->numProcs;
i++)
#define Assert(condition)
#define FLEXIBLE_ARRAY_MEMBER
uint32 LocalTransactionId
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
#define InvalidLocalTransactionId
#define LocalTransactionIdIsValid(lxid)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
static Datum PointerGetDatum(const void *X)
static Pointer DatumGetPointer(Datum X)
int SendProcSignal(pid_t pid, ProcSignalReason reason, ProcNumber procNumber)
@ PROCSIG_CATCHUP_INTERRUPT
Size add_size(Size s1, Size s2)
Size mul_size(Size s1, Size s2)
#define ShmemRequestStruct(...)
const ShmemCallbacks SharedInvalShmemCallbacks
static SISeg * shmInvalBuffer
void SICleanupQueue(bool callerHasWriteLock, int minFree)
#define NumProcStateSlots
static void CleanupInvalidationState(int status, Datum arg)
void SharedInvalBackendInit(bool sendOnly)
int SIGetDataEntries(SharedInvalidationMessage *data, int datasize)
void SIInsertDataEntries(const SharedInvalidationMessage *data, int n)
LocalTransactionId GetNextLocalTransactionId(void)
static LocalTransactionId nextLocalTransactionId
static void SharedInvalShmemRequest(void *arg)
static void SharedInvalShmemInit(void *arg)
static void SpinLockRelease(volatile slock_t *lock)
static void SpinLockAcquire(volatile slock_t *lock)
static void SpinLockInit(volatile slock_t *lock)
LocalTransactionId nextLXID
SharedInvalidationMessage buffer[MAXNUMMESSAGES]
ProcState procState[FLEXIBLE_ARRAY_MEMBER]
ShmemRequestCallback request_fn