Fix alignment problems with SharedInvalSmgrMsg.
SharedInvalSmgrMsg can't require 8-byte alignment, because then SharedInvalidationMessage will require 8-byte alignment, which will then cause ParseCommitRecord to fail on machines that are picky about alignment, because it assumes that everything that gets packed into a commit record requires only 4-byte alignment. Another problem with 05d4cbf9b6ba708858984b01ca0fc56d59d4ec7c. Discussion: http://postgr.es/m/3825454.1664310917@sss.pgh.pa.us
This commit is contained in:
parent
d0b1dbcb98
commit
0222be1371
9
src/backend/utils/cache/inval.c
vendored
9
src/backend/utils/cache/inval.c
vendored
@ -663,7 +663,9 @@ LocalExecuteInvalidationMessage(SharedInvalidationMessage *msg)
|
|||||||
*/
|
*/
|
||||||
RelFileLocatorBackend rlocator;
|
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;
|
rlocator.backend = (msg->sm.backend_hi << 16) | (int) msg->sm.backend_lo;
|
||||||
smgrcloserellocator(rlocator);
|
smgrcloserellocator(rlocator);
|
||||||
}
|
}
|
||||||
@ -1466,7 +1468,10 @@ CacheInvalidateSmgr(RelFileLocatorBackend rlocator)
|
|||||||
msg.sm.id = SHAREDINVALSMGR_ID;
|
msg.sm.id = SHAREDINVALSMGR_ID;
|
||||||
msg.sm.backend_hi = rlocator.backend >> 16;
|
msg.sm.backend_hi = rlocator.backend >> 16;
|
||||||
msg.sm.backend_lo = rlocator.backend & 0xffff;
|
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 */
|
/* check AddCatcacheInvalidationMessage() for an explanation */
|
||||||
VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg));
|
VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg));
|
||||||
|
|
||||||
|
@ -86,11 +86,14 @@ typedef struct
|
|||||||
|
|
||||||
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 id; /* type field --- must be first */
|
||||||
int8 backend_hi; /* high bits of backend ID, if temprel */
|
int8 backend_hi; /* high bits of backend ID, if temprel */
|
||||||
uint16 backend_lo; /* low 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;
|
} SharedInvalSmgrMsg;
|
||||||
|
|
||||||
#define SHAREDINVALRELMAP_ID (-4)
|
#define SHAREDINVALRELMAP_ID (-4)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user