Tom Lane <[email protected]> wrote: > Alvaro Herrera <[email protected]> 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?
Good point. I forgot that the XLOG reader can be used by frontends, so thread safety is important here. -- Antonin Houska Web: https://www.cybertec-postgresql.com
