On Wed, May 13, 2020 at 11:01:47AM -0400, Tom Lane wrote:
Tomas Vondra <tomas.von...@2ndquadrant.com> writes:
On Wed, May 13, 2020 at 10:26:39AM -0400, Tom Lane wrote:
Why is that necessary?  A static variable is defined by C to start off
as zeroes.

But is it a static variable? It's not declared as 'static' but maybe we
can assume it inits to zeroes anyway? I see we do that for
BgWriterStats.

Sorry, by "static" I meant "statically allocated", not "private to
this module".  I'm sure the C standard has some more precise terminology
for this distinction, but I forget what it is.


Ah, I see. I'm no expert in reading C standard (or any other standard),
but a quick google search yielded this section of C99 standard:

-------------------------------------------------------------------------
If an object that has static storage duration is not initialized
explicitly, then:

- if it has pointer type, it is initialized to a null pointer;

- if it has arithmetic type, it is initialized to (positive or unsigned)
  zero;

- if it is an aggregate, every member is initialized (recursively)
  according to these rules;

- if it is au nion, the first named member is initialized (recursively)
  according to these rules
-------------------------------------------------------------------------

I assume the SLRU variable counts as aggregate, with members having
arithmetic types. In which case it really should be initialized to 0.

regards

--
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Reply via email to