Re: Large writable variables

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Robert Haas <robertmhaas@gmail.com>
Cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, Thomas Munro <thomas.munro@enterprisedb.com>
Date: 2018-10-16T16:50:03Z
Lists: pgsql-hackers
Hi,

On 2018-10-16 12:41:44 -0400, Robert Haas wrote:
> On Tue, Oct 16, 2018 at 12:26 PM Andres Freund <andres@anarazel.de> wrote:
> > /*
> >  * Macro that allows to cast constness away from a variable, but doesn't
> >  * allow changing the underlying type.  Enforcement of the latter
> >  * currently only works for gcc like compilers.
> >  *
> >  * Please note IT IS NOT SAFE to cast constness away if the variable will ever
> >  * be modified (it would be undefined behaviour). Doing so anyway can cause
> >  * compiler misoptimizations or runtime crashes (modifying readonly memory).
> >  * It is only safe to use when the the variabble will not be modified, but API
> >  * design or language restrictions prevent you from declaring that
> >  * (e.g. because a function returns both const and non-const variables).
> >  */
> 
> "variabble" is a little too rich in "b"s.

variababble.


> In terms of a function that returns both const and non-const
> variables, it seems a bit sketchy that the caller would know what the
> function is doing in particular cases and make decisions based on it,
> but maybe that's just how life is.

I don't think it's necessary the callers doing so in most cases. E.g. in
the DestReceiver case, it'll be the choice of the testreceiver (say
intorel_receive modifying things for DestIntoRel), not the caller
choosing when to modify things.  The caller / users of dest receivers
won't necessarily know.

I agree it's not pretty, but I don't quite see any really realistic
other approaches here.

Greetings,

Andres Freund


Commits

  1. Apply unconstify() in more places

  2. Improve unconstify() documentation

  3. Drop const cast from dlsym() calls

  4. Const-ify a few more large static tables.

  5. Improve tzparse's handling of TZDEFRULES ("posixrules") zone data.

  6. Avoid statically allocating statement cache in ecpglib/prepare.c.

  7. Reorder FmgrBuiltin members, saving 25% in size.

  8. Add macro to cast away const without allowing changes to underlying type.

  9. Mark constantly allocated dest receiver as const.

  10. Avoid statically allocating formatting.c's format string caches.

  11. Correct constness of system attributes in heap.c & prerequisites.

  12. Avoid statically allocating gmtsub()'s timezone workspace.

  13. Correct constness of a few variables.

  14. Move the replication lag tracker into heap memory.