Обсуждение: Re: postgres.exe has encountered a problem on windows
On Fri, Apr 1, 2011 at 6:51 PM, Magnus Hagander <magnus@hagander.net> wrote:
Hmm, yes. It make more sense to add check for CurrentMemoryContext in write_console().
PFA patch for the same.
Regards,What about the cases where we directly call write_console()? Do weOn Fri, Apr 1, 2011 at 15:14, Rushabh Lathia <rushabh.lathia@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.
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.
Rushabh Lathia
EnterpriseDB, The Enterprise PostgreSQL company.
On Fri, Apr 1, 2011 at 8:23 PM, Rushabh Lathia <rushabh.lathia@gmail.com> wrote:
Oops missed the attachment.
Here it is ..
On Fri, Apr 1, 2011 at 6:51 PM, Magnus Hagander <magnus@hagander.net> wrote:What about the cases where we directly call write_console()? Do weOn Fri, Apr 1, 2011 at 15:14, Rushabh Lathia <rushabh.lathia@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.
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.
Вложения
On Fri, Apr 1, 2011 at 16:56, Rushabh Lathia <rushabh.lathia@gmail.com> wrote: > > > On Fri, Apr 1, 2011 at 8:23 PM, Rushabh Lathia <rushabh.lathia@gmail.com> > wrote: >> >> >> On Fri, Apr 1, 2011 at 6:51 PM, Magnus Hagander <magnus@hagander.net> >> wrote: >>> >>> On Fri, Apr 1, 2011 at 15:14, Rushabh Lathia <rushabh.lathia@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/
On Fri, Apr 1, 2011 at 11:31 PM, Magnus Hagander <magnus@hagander.net> wrote:
Rushabh LathiaThanks, applied with the addition of a comment.On Fri, Apr 1, 2011 at 16:56, Rushabh Lathia <rushabh.lathia@gmail.com> wrote:
>
>
> On Fri, Apr 1, 2011 at 8:23 PM, Rushabh Lathia <rushabh.lathia@gmail.com>
> wrote:
>>
>>
>> On Fri, Apr 1, 2011 at 6:51 PM, Magnus Hagander <magnus@hagander.net>
>> wrote:
>>>
>>> On Fri, Apr 1, 2011 at 15:14, Rushabh Lathia <rushabh.lathia@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 Magnus.
regards,
EnterpriseDB, The Enterprise PostgreSQL company.