77 * Portions Copyright (c) 1994, Regents of the University of California
88 *
99 * IDENTIFICATION
10- * $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.109 2004/02/08 22:28:56 neilc Exp $
10+ * $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.110 2004/05/22 21:58:24 tgl Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
5252 * transaction, since by assumption it is only called from outside any
5353 * transaction.
5454 *
55- * Although we grab AccessExclusiveLock on pg_listener for any operation,
55+ * Although we grab ExclusiveLock on pg_listener for any operation,
5656 * the lock is never held very long, so it shouldn't cause too much of
57- * a performance problem.
57+ * a performance problem. (Previously we used AccessExclusiveLock, but
58+ * there's no real reason to forbid concurrent reads.)
5859 *
5960 * An application that listens on the same relname it notifies will get
6061 * NOTIFY messages for its own NOTIFYs. These can be ignored, if not useful,
@@ -196,7 +197,7 @@ Async_Listen(char *relname, int pid)
196197 if (Trace_notify )
197198 elog (DEBUG1 , "Async_Listen(%s,%d)" , relname , pid );
198199
199- lRel = heap_openr (ListenerRelationName , AccessExclusiveLock );
200+ lRel = heap_openr (ListenerRelationName , ExclusiveLock );
200201
201202 /* Detect whether we are already listening on this relname */
202203 scan = heap_beginscan (lRel , SnapshotNow , 0 , NULL );
@@ -216,7 +217,7 @@ Async_Listen(char *relname, int pid)
216217
217218 if (alreadyListener )
218219 {
219- heap_close (lRel , AccessExclusiveLock );
220+ heap_close (lRel , ExclusiveLock );
220221 return ;
221222 }
222223
@@ -244,7 +245,7 @@ Async_Listen(char *relname, int pid)
244245
245246 heap_freetuple (tuple );
246247
247- heap_close (lRel , AccessExclusiveLock );
248+ heap_close (lRel , ExclusiveLock );
248249
249250 /*
250251 * now that we are listening, make sure we will unlisten before dying.
@@ -290,7 +291,7 @@ Async_Unlisten(char *relname, int pid)
290291 if (Trace_notify )
291292 elog (DEBUG1 , "Async_Unlisten(%s,%d)" , relname , pid );
292293
293- lRel = heap_openr (ListenerRelationName , AccessExclusiveLock );
294+ lRel = heap_openr (ListenerRelationName , ExclusiveLock );
294295
295296 scan = heap_beginscan (lRel , SnapshotNow , 0 , NULL );
296297 while ((tuple = heap_getnext (scan , ForwardScanDirection )) != NULL )
@@ -312,7 +313,7 @@ Async_Unlisten(char *relname, int pid)
312313 }
313314 heap_endscan (scan );
314315
315- heap_close (lRel , AccessExclusiveLock );
316+ heap_close (lRel , ExclusiveLock );
316317
317318 /*
318319 * We do not complain about unlistening something not being listened;
@@ -348,7 +349,7 @@ Async_UnlistenAll(void)
348349 if (Trace_notify )
349350 elog (DEBUG1 , "Async_UnlistenAll" );
350351
351- lRel = heap_openr (ListenerRelationName , AccessExclusiveLock );
352+ lRel = heap_openr (ListenerRelationName , ExclusiveLock );
352353 tdesc = RelationGetDescr (lRel );
353354
354355 /* Find and delete all entries with my listenerPID */
@@ -362,7 +363,7 @@ Async_UnlistenAll(void)
362363 simple_heap_delete (lRel , & lTuple -> t_self );
363364
364365 heap_endscan (scan );
365- heap_close (lRel , AccessExclusiveLock );
366+ heap_close (lRel , ExclusiveLock );
366367}
367368
368369/*
@@ -457,7 +458,7 @@ AtCommit_Notify(void)
457458 value [0 ] = value [1 ] = value [2 ] = (Datum ) 0 ;
458459 value [Anum_pg_listener_notify - 1 ] = Int32GetDatum (MyProcPid );
459460
460- lRel = heap_openr (ListenerRelationName , AccessExclusiveLock );
461+ lRel = heap_openr (ListenerRelationName , ExclusiveLock );
461462 tdesc = RelationGetDescr (lRel );
462463 scan = heap_beginscan (lRel , SnapshotNow , 0 , NULL );
463464
@@ -812,7 +813,7 @@ ProcessIncomingNotify(void)
812813
813814 StartTransactionCommand ();
814815
815- lRel = heap_openr (ListenerRelationName , AccessExclusiveLock );
816+ lRel = heap_openr (ListenerRelationName , ExclusiveLock );
816817 tdesc = RelationGetDescr (lRel );
817818
818819 /* Scan only entries with my listenerPID */
0 commit comments