Thomas Hallgren wrote:
> This patch will ensure that the hash table iteration performed by 
> AtCommit_Portals is restarted when a portal is deleted. This is 
> necessary since the deletion of a portal may cause the deletion of 
> another which on rare occations may cause the iterator to return a 
> deleted portal an thus a renewed attempt delete.

I have applied the following patch.  I assume it is too risky for
backpatch to 8.0.X.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/utils/mmgr/portalmem.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v
retrieving revision 1.78
diff -c -c -r1.78 portalmem.c
*** src/backend/utils/mmgr/portalmem.c  11 Apr 2005 19:51:15 -0000      1.78
--- src/backend/utils/mmgr/portalmem.c  11 May 2005 18:03:38 -0000
***************
*** 475,486 ****
   *
   * Remove all non-holdable portals created in this transaction.
   * Portals remaining from prior transactions should be left untouched.
-  *
-  * XXX This assumes that portals can be deleted in a random order, ie,
-  * no portal has a reference to any other (at least not one that will be
-  * exercised during deletion).        I think this is okay at the moment, but
-  * we've had bugs of that ilk in the past.  Keep a close eye on cursor
-  * references...
   */
  void
  AtCommit_Portals(void)
--- 475,480 ----
***************
*** 516,521 ****
--- 510,518 ----
  
                /* Zap all non-holdable portals */
                PortalDrop(portal, true);
+ 
+               /* Restart the iteration */
+               hash_seq_init(&status, PortalHashTable);
        }
  }
  
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to