On Fri, Apr 1, 2011 at 6:51 PM, Magnus Hagander <mag...@hagander.net> wrote:
> On Fri, Apr 1, 2011 at 15:14, Rushabh Lathia <rushabh.lat...@gmail.com> > wrote: > > Problem: > > ======== > > > > On windows when we run postgres.exe without any command line args, its > > getting crash or its showing error into Application logs of Event Viewer. > > > > Analysis: > > ========== > > > > For any stderr we call the write_stderr() and write_stderr() calls the > > write_console() for stderr. Now here write_console() using the palloc() > > internally, which require the CurrentMemoryContext. > > > > At the startup CurrentMemoryContext will be NULL, so palloc again calling > > write_stderr(). So recursion has been started and its ending up with > > exception. > > > > Call stack for palloc() is: > > > > main() -> check_root() -> write_stderr() -> write_console() -> > > pgwin32_toUTF16() -> palloc() > > > > Fix: > > ===== > > > > Earlier we used to call vfprintf() for windows stderr, which is now > > replaced with write_console(). > > So to avoid the exception now, I added condition for CurrentMemoryContext > > into write_stderr(). > > > > PFA patch to fix the same. > > What about the cases where we directly call write_console()? Do we > know we are good there, or should the check perhaps be made inside > write_console() instead of in the caller? > Hmm, yes. It make more sense to add check for CurrentMemoryContext in write_console(). PFA patch for the same. Regards, Rushabh Lathia EnterpriseDB, The Enterprise PostgreSQL company.