diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index 5e38ec154b61c213230b0c26aaa7559b2d3bf4a3..745f4558537963768d4d0262e7bdce99013b5716 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.145 2009/01/01 17:23:37 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.146 2009/02/13 17:12:04 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -277,6 +277,10 @@ Async_Unlisten(const char *relname)
 	if (Trace_notify)
 		elog(DEBUG1, "Async_Unlisten(%s,%d)", relname, MyProcPid);
 
+	/* If we couldn't possibly be listening, no need to queue anything */
+	if (pendingActions == NIL && !unlistenExitRegistered)
+		return;
+
 	queue_listen(LISTEN_UNLISTEN, relname);
 }
 
@@ -291,6 +295,10 @@ Async_UnlistenAll(void)
 	if (Trace_notify)
 		elog(DEBUG1, "Async_UnlistenAll(%d)", MyProcPid);
 
+	/* If we couldn't possibly be listening, no need to queue anything */
+	if (pendingActions == NIL && !unlistenExitRegistered)
+		return;
+
 	queue_listen(LISTEN_UNLISTEN_ALL, "");
 }