Commit c5c1cc3b authored by Bruce Momjian's avatar Bruce Momjian

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.

Thomas Hallgren
parent be1cc695
......@@ -12,7 +12,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mmgr/portalmem.c,v 1.78 2005/04/11 19:51:15 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/mmgr/portalmem.c,v 1.79 2005/05/11 18:05:37 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -475,12 +475,6 @@ CommitHoldablePortals(void)
*
* 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)
......@@ -516,6 +510,9 @@ AtCommit_Portals(void)
/* Zap all non-holdable portals */
PortalDrop(portal, true);
/* Restart the iteration */
hash_seq_init(&status, PortalHashTable);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment