On Mon, Mar 26, 2018 at 11:27:48AM -0400, Tom Lane wrote: > Arthur Zakirov <a.zaki...@postgrespro.ru> writes: > > I'm not sure that I understood the second case correclty. Can cache > > invalidation help in this case? I don't have confident knowledge of cache > > invalidation. It seems to me that InvalidateTSCacheCallBack() should > > release segment after commit. > > "Release after commit" sounds like a pretty dangerous design to me, > because a release necessarily implies some kernel calls, which could > fail. We can't afford to inject steps that might fail into post-commit > cleanup (because it's too late to recover by failing the transaction). > It'd be better to do cleanup while searching for a dictionary to use. > > I assume the DSM infrastructure already has some solution for getting > rid of DSM segments when the last interested process disconnects, > so maybe you could piggyback on that somehow.
Yes, there is dsm_pin_mapping() for this. But it is necessary to keep a segment even if there are no attached processes. From 0003: + /* Remain attached until end of postmaster */ + dsm_pin_segment(seg); + /* Remain attached until end of session */ + dsm_pin_mapping(seg); -- Arthur Zakirov Postgres Professional: http://www.postgrespro.com Russian Postgres Company