Re: Dead code or buggy code?
От | Greg Stark |
---|---|
Тема | Re: Dead code or buggy code? |
Дата | |
Msg-id | CAM-w4HOprJ68g3BW6R4i6idewKZNniqfShPpjb7et4dLHztJxA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Dead code or buggy code? (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: Dead code or buggy code?
|
Список | pgsql-hackers |
<p dir="ltr">So I'm just going to make the code defensive and assume NULL is possible when if maybe it isn't. <p dir="ltr">Incase it's not clear, this is one of the thing's Xi Wang's took picked up. There not to many but it turns outthey are indeed not all in the adt code so I might wait until after the commit fest to commit it to avoid causing bitchurn.<p dir="ltr">-- <br /> greg<div class="gmail_quote">On 19 Sep 2013 12:52, "Robert Haas" <<a href="mailto:robertmhaas@gmail.com">robertmhaas@gmail.com</a>>wrote:<br type="attribution" /><blockquote class="gmail_quote"style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> On Wed, Sep 18, 2013 at 6:20 PM,Greg Stark <<a href="mailto:stark@mit.edu">stark@mit.edu</a>> wrote:<br /> > The following code is in the ProcSleepat proc.c:1138.<br /> > GetBlockingAutoVacuumPgproc() should presumably always return a vacuum<br /> > pgprocentry since the deadlock state says it's blocked by autovacuum.<br /> > But I'm not really familiar enough withthis codepath to know whether<br /> > there's not a race condition here where it can sometimes return null.<br />> The following code checks autovac != NULL but the PGXACT initializer<br /> > would have seg faulted if it returnedNULL if that's possible.<br /> ><br /> > if (deadlock_state == DS_BLOCKED_BY_AUTOVACUUM &&<br/> > allow_autovacuum_cancel)<br /> > {<br /> > PGPROC *autovac = GetBlockingAutoVacuumPgproc();<br/> > PGXACT *autovac_pgxact =<br /> > &ProcGlobal->allPgXact[autovac->pgprocno];<br/> ><br /> > LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE);<br/> ><br /> > /*<br /> > * Only do it if the worker is not working to protectagainst Xid<br /> > * wraparound.<br /> > */<br /> > if ((autovac !=NULL) &&<br /> > (autovac_pgxact->vacuumFlags & PROC_IS_AUTOVACUUM) &&<br />> !(autovac_pgxact->vacuumFlags & PROC_VACUUM_FOR_WRAPAROUND))<br /> > {<br /><br/> Hmm, yeah. I remember noticing this some time ago but never got<br /> around to fixing it. +1 for rearranging thingsthere somehow.<br /><br /> --<br /> Robert Haas<br /> EnterpriseDB: <a href="http://www.enterprisedb.com" target="_blank">http://www.enterprisedb.com</a><br/> The Enterprise PostgreSQL Company<br /></blockquote></div>
В списке pgsql-hackers по дате отправления: