On Thu, Dec 10, 2015 at 2:29 PM, Amit Kapila <amit.kapil...@gmail.com> wrote: > On Thu, Dec 10, 2015 at 6:46 AM, Haribabu Kommi <kommi.harib...@gmail.com> > wrote: >> >> On Thu, Dec 10, 2015 at 4:22 AM, Alvaro Herrera >> <alvhe...@2ndquadrant.com> wrote: >> > Haribabu Kommi wrote: >> > >> >> Reverting the context release patch is already provided in the first >> >> mail of this >> >> thread [1]. Forgot to mention about the same in further mails. >> >> >> >> Here I attached the same patch. This patch needs to be applied first >> >> before >> >> pg_hba_lookup patch. I tested it in windows version also. >> > >> > So if you change the file and reload repeatedly, we leak all the memory >> > allocated for HBA lines in TopMemoryContext? This doesn't sound great. >> > Perhaps we need a dedicated context which can be reset at will so that >> > it can be refilled with the right info when we reload the file. >> >> No. There is no leaks associated with pg_hba.conf parsing. we already have >> a memory context called "hba parser context" allocated from Postmaster >> context. The "revert_hba_context_release_in_backend" patch changes it to >> TopMemoryContext. The memory required for parsing and storing parsed >> hba lines is obtained from this context. >> > > tokenize_file() is called before creation of hba parser context, so below > change would be problem. > > *** 386,392 **** tokenize_file(const char *filename, FILE *file, > > MemoryContext linecxt; > > MemoryContext oldcxt; > > > > ! linecxt = AllocSetContextCreate(CurrentMemoryContext, > > "tokenize file cxt", > > ALLOCSET_DEFAULT_MINSIZE, > > ALLOCSET_DEFAULT_INITSIZE, > > --- 386,392 ---- > > MemoryContext linecxt; > > MemoryContext oldcxt; > > > > ! linecxt = AllocSetContextCreate(TopMemoryContext, > > "tokenize file cxt", > > ALLOCSET_DEFAULT_MINSIZE, > > ALLOCSET_DEFAULT_INITSIZE, > > > How about creating "hba parser context" and "ident parser context" > at the beginning of their respective functions and don't change > anything in tokenize_file()?
The tokenize file cxt is deleted after a successful load of pg_hba.conf or pg_ident.conf files. we don't need this memory once the pg_hba.conf or pg_ident file is loaded, because of this reason, it is created as a separate context and deleted later. Regards, Hari Babu Fujitsu Australia -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers