Re: [HACKERS] postgres.exe has encountered a problem on windows
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.
Re: [HACKERS] postgres.exe has encountered a problem on windows
On Fri, Apr 1, 2011 at 8:23 PM, Rushabh Lathia rushabh.lat...@gmail.comwrote: On Fri, Apr 1, 2011 at 6:51 PM, Magnus Hagander mag...@hagander.netwrote: 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. Oops missed the attachment. Here it is .. Regards, Rushabh Lathia EnterpriseDB, The Enterprise PostgreSQL company. Index: src/backend/utils/error/elog.c === RCS file: /repositories/postgreshome/cvs/pgsql/src/backend/utils/error/elog.c,v retrieving revision 1.226 diff -c -p -r1.226 elog.c *** src/backend/utils/error/elog.c 19 Aug 2010 22:55:01 - 1.226 --- src/backend/utils/error/elog.c 1 Apr 2011 15:47:01 - *** write_console(const char *line, int len) *** 1661,1667 */ if (GetDatabaseEncoding() != GetPlatformEncoding() !in_error_recursion_trouble() ! !redirection_done) { WCHAR *utf16; int utf16len; --- 1661,1668 */ if (GetDatabaseEncoding() != GetPlatformEncoding() !in_error_recursion_trouble() ! !redirection_done ! CurrentMemoryContext) { WCHAR *utf16; int utf16len; -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Re: [HACKERS] postgres.exe has encountered a problem on windows
On Fri, Apr 1, 2011 at 16:56, Rushabh Lathia rushabh.lat...@gmail.com wrote: On Fri, Apr 1, 2011 at 8:23 PM, Rushabh Lathia rushabh.lat...@gmail.com wrote: 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. Oops missed the attachment. Here it is .. Thanks, applied with the addition of a comment. -- Magnus Hagander Me: http://www.hagander.net/ Work: http://www.redpill-linpro.com/ -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
Re: [HACKERS] postgres.exe has encountered a problem on windows
On Fri, Apr 1, 2011 at 11:31 PM, Magnus Hagander mag...@hagander.netwrote: On Fri, Apr 1, 2011 at 16:56, Rushabh Lathia rushabh.lat...@gmail.com wrote: On Fri, Apr 1, 2011 at 8:23 PM, Rushabh Lathia rushabh.lat...@gmail.com wrote: 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. Oops missed the attachment. Here it is .. Thanks, applied with the addition of a comment. Thanks Magnus. regards, Rushabh Lathia EnterpriseDB, The Enterprise PostgreSQL company.