mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 00:08:23 -05: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 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;
 | 
			
		||||
 | 
			
		||||
		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));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user