diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index eb5782f82a..fecbf06a04 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -663,7 +663,9 @@ LocalExecuteInvalidationMessage(SharedInvalidationMessage *msg) */ RelFileLocatorBackend rlocator; - rlocator.locator = msg->sm.rlocator; + rlocator.locator.dbOid = msg->sm.dbOid; + rlocator.locator.spcOid = msg->sm.spcOid; + rlocator.locator.relNumber = (((uint64) msg->sm.relNumber_hi) << 32) | msg->sm.relNumber_lo; rlocator.backend = (msg->sm.backend_hi << 16) | (int) msg->sm.backend_lo; smgrcloserellocator(rlocator); } @@ -1466,7 +1468,10 @@ CacheInvalidateSmgr(RelFileLocatorBackend rlocator) msg.sm.id = SHAREDINVALSMGR_ID; msg.sm.backend_hi = rlocator.backend >> 16; msg.sm.backend_lo = rlocator.backend & 0xffff; - msg.sm.rlocator = rlocator.locator; + msg.sm.dbOid = rlocator.locator.dbOid; + msg.sm.spcOid = rlocator.locator.spcOid; + msg.sm.relNumber_hi = rlocator.locator.relNumber >> 32; + msg.sm.relNumber_lo = rlocator.locator.relNumber & 0xffffffff; /* check AddCatcacheInvalidationMessage() for an explanation */ VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg)); diff --git a/src/include/storage/sinval.h b/src/include/storage/sinval.h index aca0347a3d..4a267be935 100644 --- a/src/include/storage/sinval.h +++ b/src/include/storage/sinval.h @@ -86,11 +86,14 @@ typedef struct typedef struct { - /* note: field layout chosen to pack into 16 bytes */ + /* note: field layout chosen to pack into 20 bytes */ int8 id; /* type field --- must be first */ int8 backend_hi; /* high bits of backend ID, if temprel */ uint16 backend_lo; /* low bits of backend ID, if temprel */ - RelFileLocator rlocator; /* spcOid, dbOid, relNumber */ + Oid dbOid; + Oid spcOid; + uint32 relNumber_hi; /* avoid 8 byte alignment requirement */ + uint32 relNumber_lo; } SharedInvalSmgrMsg; #define SHAREDINVALRELMAP_ID (-4)