I wrote: > So I propose the attached. For ease of review, I've not re-indented > the code that needs to move inside PG_TRY blocks. Also, I dropped the > logic about pfree'ing the string buffers in PLy_elog_impl's PG_FINALLY > block: that doesn't seem necessary, and continuing to do it would > require making those things volatile which is notationally messy.
Pushed. After sleeping on it I decided that removing the pfree's would be a poor tradeoff, as it's not clear how long those allocations might survive otherwise. The extra "volatile" markers for "xmsg" and "tbmsg" aren't that big a deal. Trying to mark "emsg" as volatile would be problematic because none of the StringInfo routines are set up to allow that, but it shouldn't be a problem because that struct will surely be on the stack. regards, tom lane