On Fri, Jan 7, 2022 at 1:09 PM Bossart, Nathan <bossa...@amazon.com> wrote: > I wouldn't be surprised to learn of other cases, but I've only > encountered this specific issue with MaxBackends. I think MaxBackends > is notable because it is more likely to be used by preloaded libraries > but is intentionally initialized after loading them. As noted in > an earlier message on this thread [0], using MaxBackends in a call to > RequestAddinShmemSpace() in _PG_init() may not reliably cause > problems, too.
Yes, I think MaxBackends is a particularly severe case. I've seen this problem with that GUC multiple times, and never with any other one. > > It seems overkill to remove "extern" from MaxBackends and replace > > MaxBackends with GetMaxBackends() in the existing PostgreSQL codes. I'm not > > sure how much it's actually worth doing that. Instead, isn't it enough to > > just add the comment like "Use GetMaxBackends() if you want to treat the > > lookup for uninitialized MaxBackends as an error" in the definition of > > MaxBackends? > > While that approach would provide a way to safely retrieve the value, > I think it would do little to prevent the issue in practice. If the > size of the patch is a concern, we could also convert MaxBackends into > a macro for calling GetMaxBackends(). This could also be a nice way > to avoid breaking extensions that are using it correctly while > triggering ERRORs for extensions that are using it incorrectly. I've > attached a new version of the patch that does it this way. That's too magical for my taste. -- Robert Haas EDB: http://www.enterprisedb.com