isTempNamespaceInUse() is incorrect with its handling of MyBackendId

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: isTempNamespaceInUse() is incorrect with its handling of MyBackendId
Date: 2020-01-13 09:37:03
Message-ID: 20200113093703.GA41902@paquier.xyz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi all,

While reviewing some code in namespace.c, I have bumped into the
following issue introduced by 246a6c8:
diff --git a/src/backend/catalog/namespace.c
b/src/backend/catalog/namespace.c
index c82f9fc4b5..e70243a008 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -3235,8 +3235,8 @@ isTempNamespaceInUse(Oid namespaceId)

backendId = GetTempNamespaceBackendId(namespaceId);

- if (backendId == InvalidBackendId ||
- backendId == MyBackendId)
+ /* No such temporary namespace? */
+ if (backendId == InvalidBackendId)
return false;

The current logic of isTempNamespaceInUse() would cause a session
calling the routine to return always false if trying to check if its
own temporary session is in use, but that's incorrect. It is actually
safe to remove the check on MyBackendId as the code would fall back on
a check equivalent to MyProc->tempNamespaceId a bit down as per the
attached, so let's fix it.

Thoughts?
--
Michael

Attachment Content-Type Size
temp-schema-use.patch text/x-diff 500 bytes

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dilip Kumar 2020-01-13 09:48:12 Re: PATCH: logical_work_mem and logical streaming of large in-progress transactions
Previous Message Andy Fan 2020-01-13 09:25:05 Re: How to make a OpExpr check compatible among different versions