/* * Add a relcache inval entry */ static void AddRelcacheInvalidationMessage(InvalidationListHeader *hdr, Oid dbId, Oid relId) { SharedInvalidationMessage msg; /* * Don't add a duplicate item. We assume dbId need not be checked because * it will never change. InvalidOid for relId means all relations so we * don't need to add individual ones when it is present. */ ProcessMessageList(hdr->rclist, if (msg->rc.id == SHAREDINVALRELCACHE_ID && (msg->rc.relId == relId || msg->rc.relId == InvalidOid)) return); /* OK, add the item */ msg.rc.id = SHAREDINVALRELCACHE_ID; msg.rc.dbId = dbId; msg.rc.relId = relId; /* check AddCatcacheInvalidationMessage() for an explanation */ VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg)); AddInvalidationMessage(&hdr->rclist, &msg); }
/* * Add a whole-catalog inval entry */ static void AddCatalogInvalidationMessage(InvalidationListHeader *hdr, Oid dbId, Oid catId) { SharedInvalidationMessage msg; msg.cat.id = SHAREDINVALCATALOG_ID; msg.cat.dbId = dbId; msg.cat.catId = catId; AddInvalidationMessage(&hdr->cclist, &msg); }
/* * Add a catcache inval entry */ static void AddCatcacheInvalidationMessage(InvalidationListHeader *hdr, int id, uint32 hashValue, Oid dbId) { SharedInvalidationMessage msg; Assert(id < CHAR_MAX); msg.cc.id = (int8) id; msg.cc.dbId = dbId; msg.cc.hashValue = hashValue; AddInvalidationMessage(&hdr->cclist, &msg); }
/* * Add a catcache inval entry */ static void AddCatcacheInvalidationMessage(InvalidationListHeader *hdr, int id, uint32 hashValue, ItemPointer tuplePtr, Oid dbId) { SharedInvalidationMessage msg; msg.cc.id = (int16) id; msg.cc.tuplePtr = *tuplePtr; msg.cc.dbId = dbId; msg.cc.hashValue = hashValue; AddInvalidationMessage(&hdr->cclist, &msg); }
/* * Add a whole-catalog inval entry */ static void AddCatalogInvalidationMessage(InvalidationListHeader *hdr, Oid dbId, Oid catId) { SharedInvalidationMessage msg; msg.cat.id = SHAREDINVALCATALOG_ID; msg.cat.dbId = dbId; msg.cat.catId = catId; /* check AddCatcacheInvalidationMessage() for an explanation */ VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg)); AddInvalidationMessage(&hdr->cclist, &msg); }
/* * Add an smgr inval entry */ static void AddSmgrInvalidationMessage(InvalidationListHeader *hdr, RelFileNode rnode) { SharedInvalidationMessage msg; /* Don't add a duplicate item */ ProcessMessageList(hdr->rclist, if (msg->sm.id == SHAREDINVALSMGR_ID && RelFileNodeEquals(msg->sm.rnode, rnode)) return); /* OK, add the item */ msg.sm.id = SHAREDINVALSMGR_ID; msg.sm.rnode = rnode; AddInvalidationMessage(&hdr->rclist, &msg); }
/* * Add a relcache inval entry */ static void AddRelcacheInvalidationMessage(InvalidationListHeader *hdr, Oid dbId, Oid relId) { SharedInvalidationMessage msg; /* Don't add a duplicate item */ /* We assume dbId need not be checked because it will never change */ ProcessMessageList(hdr->rclist, if (msg->rc.id == SHAREDINVALRELCACHE_ID && msg->rc.relId == relId) return); /* OK, add the item */ msg.rc.id = SHAREDINVALRELCACHE_ID; msg.rc.dbId = dbId; msg.rc.relId = relId; AddInvalidationMessage(&hdr->rclist, &msg); }
/* * Add a snapshot inval entry */ static void AddSnapshotInvalidationMessage(InvalidationListHeader *hdr, Oid dbId, Oid relId) { SharedInvalidationMessage msg; /* Don't add a duplicate item */ /* We assume dbId need not be checked because it will never change */ ProcessMessageList(hdr->rclist, if (msg->sn.id == SHAREDINVALSNAPSHOT_ID && msg->sn.relId == relId) return); /* OK, add the item */ msg.sn.id = SHAREDINVALSNAPSHOT_ID; msg.sn.dbId = dbId; msg.sn.relId = relId; /* check AddCatcacheInvalidationMessage() for an explanation */ VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg)); AddInvalidationMessage(&hdr->rclist, &msg); }
/* * Add a catcache inval entry */ static void AddCatcacheInvalidationMessage(InvalidationListHeader *hdr, int id, uint32 hashValue, Oid dbId) { SharedInvalidationMessage msg; Assert(id < CHAR_MAX); msg.cc.id = (int8) id; msg.cc.dbId = dbId; msg.cc.hashValue = hashValue; /* * Define padding bytes in SharedInvalidationMessage structs to be * defined. Otherwise the sinvaladt.c ringbuffer, which is accessed by * multiple processes, will cause spurious valgrind warnings about * undefined memory being used. That's because valgrind remembers the * undefined bytes from the last local process's store, not realizing that * another process has written since, filling the previously uninitialized * bytes */ VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg)); AddInvalidationMessage(&hdr->cclist, &msg); }