On Thu, Jan 5, 2017 at 1:02 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Robert Haas <robertmhaas@gmail.com> writes:
>> Not that you mention it, I think I mis-stated the problem in the
>> commit message: the problem is not if the tranche is unregistered, but
>> rather if it is registered but the pointer references an address that
>> is no longer valid. Registering the tranche with a fixed string
>> rather than a pointer into a DSM segment that can go away fixes that.
>
> Got it. That's fine then, but perhaps the comment on
> LWLockRegisterTranche needs to be reconsidered. It's not good enough for
> the tranche name to be "backend lifetime", it has to be something valid in
> other backends as well. That probably means either (1) compile-time
> constant in the core backend (not loadable modules!) or (2) allocated in
> the main shared-memory segment.
No, I think backend-lifetime is right. The tranche registrations are
all backend-local state, so there's no problem with backend A
registering a string at one address and backend B registering a string
at a different address. It's just important that neither of those
strings goes away before the corresponding backend does.
To put that another way, registration is performed separately in every backend.
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company