wal-receiver-fix.patch
text/x-diff
Filename: wal-receiver-fix.patch
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/replication/walreceiver.c | 2 | 16 |
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index d552f04..9d858ce 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -770,6 +770,7 @@ WalRcvDie(int code, Datum arg)
Assert(walrcv->pid == MyProcPid);
walrcv->walRcvState = WALRCV_STOPPED;
walrcv->pid = 0;
+ walrcv->ready_to_display = false;
SpinLockRelease(&walrcv->mutex);
/* Terminate the connection gracefully. */
@@ -1344,24 +1345,9 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
char *conninfo;
/* No WAL receiver, just return a tuple with NULL values */
- if (walrcv->pid == 0)
+ if (walrcv->pid == 0 || !walrcv->ready_to_display)
PG_RETURN_NULL();
- /*
- * Users attempting to read this data mustn't be shown security sensitive
- * data, so sleep until everything has been properly obfuscated.
- */
-retry:
- SpinLockAcquire(&walrcv->mutex);
- if (!walrcv->ready_to_display)
- {
- SpinLockRelease(&walrcv->mutex);
- CHECK_FOR_INTERRUPTS();
- pg_usleep(1000);
- goto retry;
- }
- SpinLockRelease(&walrcv->mutex);
-
/* determine result type */
if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
elog(ERROR, "return type must be a row type");