Alvaro Herrera <alvhe...@2ndquadrant.com> writes: > On 2019-Sep-27, Antonin Houska wrote: >>> You placed the errinfo in XLogRead's stack rather than its callers' ... >>> I don't think that works, because as soon as XLogRead returns that >>> memory is no longer guaranteed to exist.
>> I was aware of this problem, therefore I defined the field as static: >> >> +XLogReadError * >> +XLogRead(char *buf, XLogRecPtr startptr, Size count, TimeLineID *tli_p, >> + WALOpenSegment *seg, WALSegmentContext *segcxt, >> + WALSegmentOpen openSegment) >> +{ >> + char *p; >> + XLogRecPtr recptr; >> + Size nbytes; >> + static XLogReadError errinfo; > I see. That seems like an absolutely terrible "fix". We don't really want XLogRead to be defined in a way that forces it to be non-reentrant do we? regards, tom lane