diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index 4eed6a64b665c21948d3b9d18f73843e4ce93132..ae5272286a2d4c4a9455eac79675688649d18531 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/access/transam/multixact.c,v 1.19 2006/07/13 16:49:13 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/multixact.c,v 1.20 2006/07/20 00:46:42 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1493,9 +1493,14 @@ CheckPointMultiXact(void)
 
 	/*
 	 * Truncate the SLRU files.  This could be done at any time, but
-	 * checkpoint seems a reasonable place for it.
+	 * checkpoint seems a reasonable place for it.  There is one exception:
+	 * if we are called during xlog recovery, then shared->latest_page_number
+	 * isn't valid (because StartupMultiXact hasn't been called yet) and
+	 * so SimpleLruTruncate would get confused.  It seems best not to risk
+	 * removing any data during recovery anyway, so don't truncate.
 	 */
-	TruncateMultiXact();
+	if (!InRecovery)
+		TruncateMultiXact();
 }
 
 /*