diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 91fbbd0be6bb1181ad504475467085e6edd390ee..8f2a3ed5e4fa2759a3ae5769e7613174ce32d07c 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.290 2010/05/13 11:15:38 sriggs Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.291 2010/05/13 11:39:30 sriggs Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1347,6 +1347,18 @@ RecordTransactionAbort(bool isSubXact)
 
 	(void) XLogInsert(RM_XACT_ID, XLOG_XACT_ABORT, rdata);
 
+	/*
+	 * Report the latest async abort LSN, so that the WAL writer knows to
+	 * flush this abort. There's nothing to be gained by delaying this,
+	 * since WALWriter may as well do this when it can. This is important
+	 * with streaming replication because if we don't flush WAL regularly
+	 * we will find that large aborts leave us with a long backlog for
+	 * when commits occur after the abort, increasing our window of data
+	 * loss should problems occur at that point.
+	 */
+	if (!isSubXact)
+		XLogSetAsyncCommitLSN(XactLastRecEnd);
+
 	/*
 	 * Mark the transaction aborted in clog.  This is not absolutely necessary
 	 * but we may as well do it while we are here; also, in the subxact case