2013/7/25 Stephen Frost <[email protected]>: > Pavel, > > First, please only quote the relevant parts of the email when > responding. > > * Pavel Stehule ([email protected]) wrote: >> I used a ErrorContext because I wasn't sure so errcontext and similar >> function can work in different context. Now I look there and there >> should be well initialized ErrorDataStack, due >> >> int >> set_errcontext_domain(const char *domain) >> { >> <------>ErrorData *edata = &errordata[errordata_stack_depth]; >> >> <------>/* we don't bother incrementing recursion_depth */ >> <------>CHECK_STACK_DEPTH(); >> >> <------>edata->context_domain = domain; >> >> <------>return 0; >> } >> >> but MemoryContext can be any - so probably some private context is ideal. > > While set_errcontext_domain() doesn't care about the MemoryContext, per > se, the errcontext() macro further calls errcontext_msg() which is > currently set up to explicitly use ErrorContext. Perhaps an elog.c > global to tell errcontext_msg() to not switch memory contexts, but what > happens if there's an error thrown by a callback function..?
Probably then will be raised a panic due recursion call of error API Our PL doesn't raise a exception in callback function explicitly. Probably there is risk - "out of memory" - but same risk is when you call errcontext inside elog function. Pavel > > Thanks, > > Stephen -- Sent via pgsql-committers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-committers
