Re: ereport bug

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: ereport bug
Дата
Msg-id 24065.1421075842@sss.pgh.pa.us
обсуждение исходный текст
Ответ на ereport bug  (Dmitry Voronin <carriingfate92@yandex.ru>)
Список pgsql-hackers
Dmitry Voronin <carriingfate92@yandex.ru> writes:
> <div><div><div><div data-lang="2"><div>Hello, postgresmen!</div><div>�</div><div>I found incorrect execution of
ereport()macro. <br />If we pass into ereport() function 2 or more arguments, the macro errcontext does not correct
execute.So, ereport() call stack is:</div><div>�</div><div>errstart<br />errcontext_msg<br />set_errcontext_domain<br
/>errmsg<br/>errfinish<br />pg_unreachable</div><div>�</div><div><span lang="en"><span>This bug</span> <span>causes
thaterror messages (for example, in PL/TCL) are </span></span><span lang="en"><span>not localized.<br /><br
/>Solutions:<br/>- Wrap all errcontext() macro in </span></span><span lang="en"><span><span lang="en"><span>brackets,
thatis errcontext("error message %s", "end message") -> (</span></span></span></span><span lang="en"><span><span
lang="en"><span>errcontext("errormessage %s", "end message"))</span></span></span></span></div><div><span
lang="en"><span><spanlang="en"><span>- Rewrite this macro</span></spa! 
 n></span></span></div><div><span lang="en"><span><span lang="en"><span>-
???</span></span></span></span></div><div>�</div><div><spanlang="en"><span>I am attaching</span> <span>to this
letter</span><span>a test case</span> <span>that shows</span> <span>the behavior errcontext() macro and the way to fix
it.<br/></span></span></div><div><br />I am using postgresql 9.4 and test it on gcc 4.7 and gcc 4.8.1.<br /><br
/></div><div>--Best regards, Dmitry Voronin</div></div></div></div></div> 

(Please don't post HTML-only mail to the PG mailing lists ...)

Hm ... the initial thought was that errcontext would never be used
directly in an ereport() macro, but you're right that we now have some
places that violate that rule.  So the comma expression turns into a
couple of arguments to errfinish, meaning the order of evaluation becomes
compiler-dependent which is bad.

I think the easiest fix is to have errstart initialize context_domain
to the same value as domain.  The order of evaluation is still
compiler-dependent, but it no longer matters because any errcontext
calls occurring textually within an ereport should be trying to select
the same domain as the ereport anyway.

            regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Stephen Frost
Дата:
Сообщение: Re: INSERT ... ON CONFLICT UPDATE and RLS
Следующее
От: Andres Freund
Дата:
Сообщение: Latches and barriers