mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-28 11:55:03 +03:00 
			
		
		
		
	Fix failure when a shared tidbitmap has only one page.
Commit 98e6e89040 made inadequate
provision for the case of a single-page shared tidbitmap.  It
allocate space for a shared PagetableEntry, but failed to
initialize it.
Report by Thomas Munro.  Patch by Dilip Kumar, with some comment
changes by me.
Discussion: http://postgr.es/m/CAEepm=19Cmnfbi-j2Bw-a6yGPeHE1OVhKvvKz9bRBTJGKfGHMA@mail.gmail.com
			
			
This commit is contained in:
		| @@ -866,12 +866,14 @@ tbm_prepare_shared_iterate(TIDBitmap *tbm) | |||||||
| 		else if (tbm->status == TBM_ONE_PAGE) | 		else if (tbm->status == TBM_ONE_PAGE) | ||||||
| 		{ | 		{ | ||||||
| 			/* | 			/* | ||||||
| 			 * In one page mode allocate the space for one pagetable entry and | 			 * In one page mode allocate the space for one pagetable entry, | ||||||
| 			 * directly store its index i.e. 0 in page array | 			 * initialize it, and directly store its index (i.e. 0) in the | ||||||
|  | 			 * page array. | ||||||
| 			 */ | 			 */ | ||||||
| 			tbm->dsapagetable = dsa_allocate(tbm->dsa, sizeof(PTEntryArray) + | 			tbm->dsapagetable = dsa_allocate(tbm->dsa, sizeof(PTEntryArray) + | ||||||
| 											 sizeof(PagetableEntry)); | 											 sizeof(PagetableEntry)); | ||||||
| 			ptbase = dsa_get_address(tbm->dsa, tbm->dsapagetable); | 			ptbase = dsa_get_address(tbm->dsa, tbm->dsapagetable); | ||||||
|  | 			memcpy(ptbase->ptentry, &tbm->entry1, sizeof(PagetableEntry)); | ||||||
| 			ptpages->index[0] = 0; | 			ptpages->index[0] = 0; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user