isTempNamespaceInUse() is incorrect with its handling of MyBackendId

Michael Paquier <[email protected]> Mon, 13 Jan 2020 18:37:03 +0900
Newsgroups gmane.comp.db.postgresql.devel.general
Message-ID <[email protected]>
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
temp-schema-use.patch (text/x-diff, 500 B)
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;
 
 	/* Is the backend alive? */
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEEG72nH6vTowiyblFKnvQgOdbyQH0FAl4cOj8ACgkQnvQgOdby
QH2MxA//SceXVsmgXQPichahoscpH8G18p40MNiQk4bywvdNLMfKM4WW6vp4POZW
wsUkdszTMhfKGgxWGBI0pc6QCK1HAwwvXpz+/t5Ly9diPlrAGT7Rn5D/DiwFjr5H
gHA8dMI366BrE3ACrjzU9Vwur6JEn/F5bHPbwdpTvtdn/ReVIqsflGzagDOgpkAb
O0zWayPx/Z0sMLISDm8L4/BSUeO6Koeb6OFRC3JUHR1d04Ltu11/ojXHnV67qL7P
bzhuPPhXL6/9KkH3r40KWsOMNo+HkmSWCSPE412aDT1FZpKsxDGDxXCHdyI4uQ8R
NJQCGOCGHDSm19TrwZujVfLgByseaiMnaX+o2f06EpywJPzp4f0kGHC7DPdCPHDF
nkYObfmiumZQYATZ3vlBtYjHp1biVdZaND/vs1Utg5pzJa/8A96SE1c1SloSmcaF
u7R+YvKoF3eFw1elwsbrrJV2za8fJzkKBkPb9v0nZSE8fX66UDpKc2+EtdRH0zRx
eynmkRJAo0BaIMuUlFpizGYPL8plByoHAzbL+3gZpgF/YOtULqMOtSYMAp3jfxog
zSKggKRzWhveMimhCq43wbm90WTylfSDzayT5fewtR+gOeKqolg1YZc74zrfYN5R
TnW1W/tR4/+AU4k0/z8GrwG8b/SOkv0O+ukmCmsWzc9VTe21wcM=
=cBDD
-----END PGP SIGNATURE-----