On 2/27/15 11:27 PM, Stephen Frost wrote:
>@@ -344,6 +346,21 @@ ProcessConfigFile(GucContext context)
>                                            PGC_BACKEND, 
PGC_S_DYNAMIC_DEFAULT);
>    }
>
>+   guc_file_variables = (ConfigFileVariable *)
>+                   guc_malloc(FATAL, num_guc_file_variables * sizeof(struct 
ConfigFileVariable));
Uh, perhaps I missed it, but what happens on a reload?  Aren't we going
to realloc this every time?  Seems like we should be doing a
guc_malloc() the first time through but doing guc_realloc() after, or
we'll leak memory on every reload.

>+   /*
>+    * Apply guc config parameters to guc_file_variable
>+    */
>+   guc = guc_file_variables;
>+   for (item = head; item; item = item->next, guc++)
>+   {
>+       guc->name = guc_strdup(FATAL, item->name);
>+       guc->value = guc_strdup(FATAL, item->value);
>+       guc->filename = guc_strdup(FATAL, item->filename);
>+       guc->sourceline = item->sourceline;
>+   }
Uh, ditto and double-down here.  I don't see a great solution other than
looping through the previous array and free'ing each of these, since we
can't depend on the memory context machinery being up and ready at this
point, as I recall.

MemoryContextInit() happens near the top of main(), before we call InitializeGUCOptions(). So it should be possible to use memory contexts here. I don't know why guc doesn't use palloc; perhaps for historical reasons at this point?
--
Jim Nasby, Data Architect, Blue Treble Consulting
Data in Trouble? Get it in Treble! http://BlueTreble.com


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to