Re: [HACKERS] postgres.exe has encountered a problem on windows

2011-04-01 Thread Rushabh Lathia
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

2011-04-01 Thread Rushabh Lathia
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

2011-04-01 Thread Magnus Hagander
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

2011-04-01 Thread Rushabh Lathia
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.