On 10 March 2017 at 06:17, Robert Haas <robertmh...@gmail.com> wrote:
> On Thu, Mar 9, 2017 at 11:50 AM, Dilip Kumar <dilipbal...@gmail.com> > wrote: > > On Thu, Mar 9, 2017 at 10:02 PM, Dilip Kumar <dilipbal...@gmail.com> > wrote: > >> I slightly modified your query to reproduce this issue. > >> > >> explain analyze select * from r1 where value<555; > >> > >> Patch is attached to fix the problem. > > > > I forgot to mention the cause of the problem. > > > > if (istate->schunkptr < istate->nchunks) > > { > > PagetableEntry *chunk = &ptbase[idxchunks[istate->schunkptr]]; > > PagetableEntry *page = &ptbase[idxpages[istate->spageptr]]; > > BlockNumber chunk_blockno; > > > > In above if condition we have only checked istate->schunkptr < > > istate->nchunks that means we have some chunk left so we are safe to > > access idxchunks, But just after that we are accessing > > ptbase[idxpages[istate->spageptr]] without checking that accessing > > idxpages is safe or not. > > > > tbm_iterator already handling this case, I broke it in > tbm_shared_iterator. > > I don't know if this is the only problem -- it would be good if David > could retest -- but it's certainly *a* problem, so committed. > Thanks for committing, and generally parallelising more stuff. I confirm that my test case is now working again. I'll be in this general area today, so will mention if I stumble over anything that looks broken. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services