Re: Large writable variables
Tom Lane <tgl@sss.pgh.pa.us>
Attachments
- allocate-gmtmem-only-when-needed.patch (text/x-diff) patch
I wrote: > Andres Freund <andres@anarazel.de> writes: >> 0000000008560224 0000000000023440 b tzdefrules_s >> 0000000008536704 0000000000023440 b gmtmem.7009 > I think that tzdefrules_s is not used in common cases (though I could be > wrong about that), so we could win by alloc-on-first-use. The same might > be true for gmtmem, but there's a sticking point: there is no provision > for failure there, so I'm unsure how we avoid crashing on OOM. So my intuition was exactly backwards on this. 1. tzdefrules_s is filled in the postmaster, and if it's not filled there it'd be filled by every child process, so there's zero point in converting it to malloc-on-the-fly style. This is because tzparse() always wants it filled. That's actually a tad annoying, because it looks to me like with many timezone settings the data will not get used, but I'm hesitant to mess with the IANA code's logic enough to improve that. Maybe I'll try submitting an upstream patch and see what they think of it first. 2. gmtmem, on the other hand, is only used if somebody calls pg_gmtime, which already has a perfectly good error-report convention, cf gmtime(3). We have exactly one caller, which was not bothering to test for error :-( and would dump core on failure. And that caller isn't reached in most processes, at least not in the regression tests. So this side of it is easy to improve. Hence I propose the attached patch for point 2, which I'd want to backpatch to keep our copies of the IANA code in sync. Point 1 maybe can be addressed in future. regards, tom lane
Commits
-
Apply unconstify() in more places
- 0a8590b2a09e 12.0 landed
-
Improve unconstify() documentation
- f2898de98a54 12.0 landed
-
Drop const cast from dlsym() calls
- e6f5d1accd3a 12.0 landed
-
Const-ify a few more large static tables.
- 48d818ede15b 12.0 landed
-
Improve tzparse's handling of TZDEFRULES ("posixrules") zone data.
- fb38d9a2e1ed 9.5.15 landed
- ec5fe7f799a4 9.4.20 landed
- e7eb07f70951 12.0 landed
- db4f9c0258be 11.1 landed
- c776cd47245a 9.3.25 landed
- 312f632005f3 10.6 landed
- 1164389e12b0 9.6.11 landed
-
Avoid statically allocating statement cache in ecpglib/prepare.c.
- e15aae829e3e 12.0 landed
-
Reorder FmgrBuiltin members, saving 25% in size.
- 28d750c0cd5b 12.0 landed
-
Add macro to cast away const without allowing changes to underlying type.
- d1211c63f010 12.0 landed
-
Mark constantly allocated dest receiver as const.
- 93ca02e00560 12.0 landed
-
Avoid statically allocating formatting.c's format string caches.
- fd85e9f78d44 12.0 landed
-
Correct constness of system attributes in heap.c & prerequisites.
- 02a30a09f9e5 12.0 landed
-
Avoid statically allocating gmtsub()'s timezone workspace.
- baa94ebe2cc8 9.3.25 landed
- 5ef71d4bd322 9.6.11 landed
- 27ba589b745f 9.4.20 landed
- 18c725413fad 9.5.15 landed
- d64a54fb9c81 10.6 landed
- d11268237378 11.1 landed
- 3dfef0c519de 12.0 landed
-
Correct constness of a few variables.
- 62649bad831f 12.0 landed
-
Move the replication lag tracker into heap memory.
- e73ca79fc78d 12.0 landed