1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-12 15:23:02 +03:00

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 05d4cbf9b6.

Discussion: http://postgr.es/m/3825454.1664310917@sss.pgh.pa.us
This commit is contained in:
Robert Haas
2022-09-28 07:51:48 -04:00
parent d0b1dbcb98
commit 0222be1371
2 changed files with 12 additions and 4 deletions

View File

@@ -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));