]> granicus.if.org Git - postgresql/commitdiff
Make sure we only try to free snapshots that have been passed through
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 11 Jul 2008 02:10:14 +0000 (02:10 +0000)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 11 Jul 2008 02:10:14 +0000 (02:10 +0000)
CopySnapshot, per Neil Conway.  Also add a comment about the assumption in
GetSnapshotData that the argument is statically allocated.

Also, fix some more typos in comments in snapmgr.c.

src/backend/storage/ipc/procarray.c
src/backend/utils/time/snapmgr.c

index 62a17003c1c24550e805cbf2ae997bb07b10e667..0286809d1c4fba135037e2b380d6fca035a1accf 100644 (file)
@@ -23,7 +23,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/storage/ipc/procarray.c,v 1.44 2008/05/12 20:02:00 alvherre Exp $
+ *       $PostgreSQL: pgsql/src/backend/storage/ipc/procarray.c,v 1.45 2008/07/11 02:10:13 alvherre Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -666,6 +666,9 @@ GetOldestXmin(bool allDbs, bool ignoreVacuum)
  *             RecentGlobalXmin: the global xmin (oldest TransactionXmin across all
  *                     running transactions, except those running LAZY VACUUM).  This is
  *                     the same computation done by GetOldestXmin(true, true).
+ *
+ * Note: this function should probably not be called with an argument that's
+ * not statically allocated (see xip allocation below).
  */
 Snapshot
 GetSnapshotData(Snapshot snapshot)
index c0f6a97847e13e00315426f26c69db80b7b150f2..841a92567d1d7c0d64f254c0f21e5e47487eca17 100644 (file)
@@ -3,10 +3,9 @@
  *             PostgreSQL snapshot manager
  *
  * We keep track of snapshots in two ways: the "registered snapshots" list,
- * and the "active snapshot" stack.  All snapshots in any of them is supposed
- * to be in persistent memory.  When a snapshot is no longer in any of these
- * lists (tracked by separate refcounts of each snapshot), its memory can be
- * freed.
+ * and the "active snapshot" stack.  All snapshots in either of them live in
+ * persistent memory.  When a snapshot is no longer in any of these lists
+ * (tracked by separate refcounts on each snapshot), its memory can be freed.
  *
  * These arrangements let us reset MyProc->xmin when there are no snapshots
  * referenced by this transaction.  (One possible improvement would be to be
@@ -23,7 +22,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/time/snapmgr.c,v 1.3 2008/07/11 00:00:29 neilc Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/time/snapmgr.c,v 1.4 2008/07/11 02:10:14 alvherre Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -261,6 +260,7 @@ FreeSnapshot(Snapshot snapshot)
 {
        Assert(snapshot->regd_count == 0);
        Assert(snapshot->active_count == 0);
+       Assert(snapshot->copied);
 
        pfree(snapshot);
 }