Skip to content
Snippets Groups Projects
Commit f59175d7 authored by Neil Conway's avatar Neil Conway
Browse files

Minor API cleanup for async notifications: we can only register the

current backend in pg_listener, so there is little point in making
the PID to register part of async.c's public API. Other minor tweaks.
parent 66347691
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.124 2005/08/20 00:39:53 tgl Exp $ * $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.125 2005/10/06 21:30:32 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -146,13 +146,10 @@ static void ClearPendingNotifies(void); ...@@ -146,13 +146,10 @@ static void ClearPendingNotifies(void);
* Actual notification happens during transaction commit. * Actual notification happens during transaction commit.
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* *
* Results:
* XXX
*
*-------------------------------------------------------------- *--------------------------------------------------------------
*/ */
void void
Async_Notify(char *relname) Async_Notify(const char *relname)
{ {
if (Trace_notify) if (Trace_notify)
elog(DEBUG1, "Async_Notify(%s)", relname); elog(DEBUG1, "Async_Notify(%s)", relname);
...@@ -180,11 +177,8 @@ Async_Notify(char *relname) ...@@ -180,11 +177,8 @@ Async_Notify(char *relname)
* *
* This is executed by the SQL listen command. * This is executed by the SQL listen command.
* *
* Register a backend (identified by its Unix PID) as listening * Register the current backend as listening on the specified
* on the specified relation. * relation.
*
* Results:
* XXX
* *
* Side effects: * Side effects:
* pg_listener is updated. * pg_listener is updated.
...@@ -192,7 +186,7 @@ Async_Notify(char *relname) ...@@ -192,7 +186,7 @@ Async_Notify(char *relname)
*-------------------------------------------------------------- *--------------------------------------------------------------
*/ */
void void
Async_Listen(char *relname, int pid) Async_Listen(const char *relname)
{ {
Relation lRel; Relation lRel;
HeapScanDesc scan; HeapScanDesc scan;
...@@ -203,7 +197,7 @@ Async_Listen(char *relname, int pid) ...@@ -203,7 +197,7 @@ Async_Listen(char *relname, int pid)
bool alreadyListener = false; bool alreadyListener = false;
if (Trace_notify) if (Trace_notify)
elog(DEBUG1, "Async_Listen(%s,%d)", relname, pid); elog(DEBUG1, "Async_Listen(%s,%d)", relname, MyProcPid);
lRel = heap_open(ListenerRelationId, ExclusiveLock); lRel = heap_open(ListenerRelationId, ExclusiveLock);
...@@ -213,7 +207,7 @@ Async_Listen(char *relname, int pid) ...@@ -213,7 +207,7 @@ Async_Listen(char *relname, int pid)
{ {
Form_pg_listener listener = (Form_pg_listener) GETSTRUCT(tuple); Form_pg_listener listener = (Form_pg_listener) GETSTRUCT(tuple);
if (listener->listenerpid == pid && if (listener->listenerpid == MyProcPid &&
strncmp(NameStr(listener->relname), relname, NAMEDATALEN) == 0) strncmp(NameStr(listener->relname), relname, NAMEDATALEN) == 0)
{ {
alreadyListener = true; alreadyListener = true;
...@@ -241,7 +235,7 @@ Async_Listen(char *relname, int pid) ...@@ -241,7 +235,7 @@ Async_Listen(char *relname, int pid)
i = 0; i = 0;
values[i++] = (Datum) relname; values[i++] = (Datum) relname;
values[i++] = (Datum) pid; values[i++] = (Datum) MyProcPid;
values[i++] = (Datum) 0; /* no notifies pending */ values[i++] = (Datum) 0; /* no notifies pending */
tuple = heap_formtuple(RelationGetDescr(lRel), values, nulls); tuple = heap_formtuple(RelationGetDescr(lRel), values, nulls);
...@@ -271,19 +265,16 @@ Async_Listen(char *relname, int pid) ...@@ -271,19 +265,16 @@ Async_Listen(char *relname, int pid)
* *
* This is executed by the SQL unlisten command. * This is executed by the SQL unlisten command.
* *
* Remove the backend from the list of listening backends * Remove the current backend from the list of listening backends
* for the specified relation. * for the specified relation.
* *
* Results:
* XXX
*
* Side effects: * Side effects:
* pg_listener is updated. * pg_listener is updated.
* *
*-------------------------------------------------------------- *--------------------------------------------------------------
*/ */
void void
Async_Unlisten(char *relname, int pid) Async_Unlisten(const char *relname)
{ {
Relation lRel; Relation lRel;
HeapScanDesc scan; HeapScanDesc scan;
...@@ -297,7 +288,7 @@ Async_Unlisten(char *relname, int pid) ...@@ -297,7 +288,7 @@ Async_Unlisten(char *relname, int pid)
} }
if (Trace_notify) if (Trace_notify)
elog(DEBUG1, "Async_Unlisten(%s,%d)", relname, pid); elog(DEBUG1, "Async_Unlisten(%s,%d)", relname, MyProcPid);
lRel = heap_open(ListenerRelationId, ExclusiveLock); lRel = heap_open(ListenerRelationId, ExclusiveLock);
...@@ -306,7 +297,7 @@ Async_Unlisten(char *relname, int pid) ...@@ -306,7 +297,7 @@ Async_Unlisten(char *relname, int pid)
{ {
Form_pg_listener listener = (Form_pg_listener) GETSTRUCT(tuple); Form_pg_listener listener = (Form_pg_listener) GETSTRUCT(tuple);
if (listener->listenerpid == pid && if (listener->listenerpid == MyProcPid &&
strncmp(NameStr(listener->relname), relname, NAMEDATALEN) == 0) strncmp(NameStr(listener->relname), relname, NAMEDATALEN) == 0)
{ {
/* Found the matching tuple, delete it */ /* Found the matching tuple, delete it */
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.243 2005/08/01 04:03:57 tgl Exp $ * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.244 2005/10/06 21:30:36 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -823,7 +823,7 @@ ProcessUtility(Node *parsetree, ...@@ -823,7 +823,7 @@ ProcessUtility(Node *parsetree,
{ {
ListenStmt *stmt = (ListenStmt *) parsetree; ListenStmt *stmt = (ListenStmt *) parsetree;
Async_Listen(stmt->relation->relname, MyProcPid); Async_Listen(stmt->relation->relname);
} }
break; break;
...@@ -831,7 +831,7 @@ ProcessUtility(Node *parsetree, ...@@ -831,7 +831,7 @@ ProcessUtility(Node *parsetree,
{ {
UnlistenStmt *stmt = (UnlistenStmt *) parsetree; UnlistenStmt *stmt = (UnlistenStmt *) parsetree;
Async_Unlisten(stmt->relation->relname, MyProcPid); Async_Unlisten(stmt->relation->relname);
} }
break; break;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/commands/async.h,v 1.28 2005/06/17 22:32:49 tgl Exp $ * $PostgreSQL: pgsql/src/include/commands/async.h,v 1.29 2005/10/06 21:30:39 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
extern bool Trace_notify; extern bool Trace_notify;
/* notify-related SQL statements */ /* notify-related SQL statements */
extern void Async_Notify(char *relname); extern void Async_Notify(const char *relname);
extern void Async_Listen(char *relname, int pid); extern void Async_Listen(const char *relname);
extern void Async_Unlisten(char *relname, int pid); extern void Async_Unlisten(const char *relname);
/* perform (or cancel) outbound notify processing at transaction commit */ /* perform (or cancel) outbound notify processing at transaction commit */
extern void AtCommit_Notify(void); extern void AtCommit_Notify(void);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment