Re: isTempNamespaceInUse() is incorrect with its handling ofMyBackendId - Mailing list pgsql-hackers

From Julien Rouhaud
Subject Re: isTempNamespaceInUse() is incorrect with its handling ofMyBackendId
Date
Msg-id 20200113120901.GA38515@nol
Whole thread Raw
In response to isTempNamespaceInUse() is incorrect with its handling of MyBackendId  (Michael Paquier <michael@paquier.xyz>)
Responses Re: isTempNamespaceInUse() is incorrect with its handling ofMyBackendId  (Michael Paquier <michael@paquier.xyz>)
List pgsql-hackers
On Mon, Jan 13, 2020 at 06:37:03PM +0900, Michael Paquier wrote:
> 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.

Indeed.

> 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?

But that means an extraneous call to BackendIdGetProc() in that case, it seems
better to avoid it if we already have the information.



pgsql-hackers by date:

Previous
From: Juan José Santamaría Flecha
Date:
Subject: Re: Allow to_date() and to_timestamp() to accept localized names
Next
From: vignesh C
Date:
Subject: Re: Add FOREIGN to ALTER TABLE in pg_dump