Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/tcop/postgres.c')
-rw-r--r--src/backend/tcop/postgres.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index ea517f4b9bb..2b393fd0430 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -4225,6 +4225,22 @@ PostgresMain(const char *dbname, const char *username)
sigprocmask(SIG_SETMASK, &UnBlockSig, NULL);
/*
+ * Generate a random cancel key, if this is a backend serving a
+ * connection. InitPostgres() will advertise it in shared memory.
+ */
+ Assert(!MyCancelKeyValid);
+ if (whereToSendOutput == DestRemote)
+ {
+ if (!pg_strong_random(&MyCancelKey, sizeof(int32)))
+ {
+ ereport(ERROR,
+ (errcode(ERRCODE_INTERNAL_ERROR),
+ errmsg("could not generate random cancel key")));
+ }
+ MyCancelKeyValid = true;
+ }
+
+ /*
* General initialization.
*
* NOTE: if you are tempted to add code in this vicinity, consider putting
@@ -4276,6 +4292,7 @@ PostgresMain(const char *dbname, const char *username)
{
StringInfoData buf;
+ Assert(MyCancelKeyValid);
pq_beginmessage(&buf, PqMsg_BackendKeyData);
pq_sendint32(&buf, (int32) MyProcPid);
pq_sendint32(&buf, (int32) MyCancelKey);