Re: Shortcoming in CLOBBER_FREED_MEMORY coverage: disk buffer pointers

Поиск
Список
Период
Сортировка
От Jim Nasby
Тема Re: Shortcoming in CLOBBER_FREED_MEMORY coverage: disk buffer pointers
Дата
Msg-id 54C81196.8000509@BlueTreble.com
обсуждение исходный текст
Ответ на Re: Shortcoming in CLOBBER_FREED_MEMORY coverage: disk buffer pointers  (Greg Stark <stark@mit.edu>)
Ответы Re: Shortcoming in CLOBBER_FREED_MEMORY coverage: disk buffer pointers  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On 1/26/15 6:11 PM, Greg Stark wrote:
>
> On Tue, Jan 27, 2015 at 12:03 AM, Jim Nasby <Jim.Nasby@bluetreble.com <mailto:Jim.Nasby@bluetreble.com>> wrote:
>
>     But one backend can effectively "pin" a buffer more than once, no? If so, then ISTM there's some risk that code
pathA pins and forgets to unpin, but path B accidentally unpins for A.
 
>
>
> The danger is that there's a codepath that refers to memory it doesn't have a pin on but that there is no actual test
inour regression suite that doesn't actually have a second pin on the same buffer. If there is in fact no reachable
codepath at all without the second pin then there's no active bug, only a bad coding practice. But if there are code
pathsthat we just aren't testing then that's a real bug.
 
>
> IIRC CLOBBER_FREED_MEMORY only affects palloc'd blocks. Do we not have a mode that automatically removes any buffer
assoon as it's not pinned? That seems like it would be a valuable addition.
 

By setting BufferDesc.tag to 0?

On a related note... I'm confused by this part of UnpinBuffer. How is refcount ending up > 0??
Assert(ref->refcount > 0);ref->refcount--;if (ref->refcount == 0){    /* I'd better not still hold any locks on the
buffer*/    Assert(!LWLockHeldByMe(buf->content_lock));    Assert(!LWLockHeldByMe(buf->io_in_progress_lock));
 
    LockBufHdr(buf);
    /* Decrement the shared reference count */    Assert(buf->refcount > 0);    buf->refcount--;


BTW, I certainly see no evidence of CLOBBER_FREED_MEMORY coming into play here.

> Fwiw I think our experience is that bugs where buffers are unpinned get exposed pretty quickly in production. I
supposethe same might not be true for rarely called codepaths or in cases where the buffers are usually already
pinned.

Yeah, that's what I was thinking. If there's some easy way to correctly associate pins with specific code paths
(owners?)then maybe it's worth doing so; but I don't think it's worth much effort.
 
-- 
Jim Nasby, Data Architect, Blue Treble Consulting
Data in Trouble? Get it in Treble! http://BlueTreble.com



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Stephen Frost
Дата:
Сообщение: Re: Parallel Seq Scan
Следующее
От: Stephen Frost
Дата:
Сообщение: Re: WITH CHECK and Column-Level Privileges