On 2017-12-19 13:17:52 -0500, Tom Lane wrote: > Robert Haas <robertmh...@gmail.com> writes: > > On Tue, Dec 19, 2017 at 8:44 AM, Craig Ringer <cr...@2ndquadrant.com> wrote: > >> I didn't want to mess with the MemoryContextMethods and expose a > >> printf-wrapper style typedef in memnodes.h, so I went with a hook global. > > > That looks pretty grotty to me. I think if you want to elog/ereport > > this, you need to pass another argument to MemoryContextStats() or add > > another memory context method. This is pretty much a textbook example > > of the wrong way to use a global variable, IMHO.
Agreed. > Yeah. But please don't mess with MemoryContextStats per se --- > I dunno about you guys but "call MemoryContextStats(TopMemoryContext)" > is kinda wired into my gdb reflexes. I think what'd make sense > is a new function "MemoryContextStatsTo(context, function_pointer)". > It's okay to redefine the APIs of the per-context-type functions > these would call, though, because nobody calls those functions directly. We already have MemoryContextStatsDetail() - it seems to make sense to expand that API and leave MemoryContextStats() alone. I don't think there's a need for a third variant? Greetings, Andres Freund