On Thu, Oct 13, 2011 at 12:54:38PM +0200, Dag-Erling Smørgrav wrote: > I looked at some of the programs that use pidfile(3) in base, and they > pretty much all get it wrong. Consider these two scenarios: > > 1) common case > > process A process B > > main() > pidfile_open() -> success > perform_initialization() > daemon() > pidfile_write() -> success > perform_work() main() > pidfile_open() -> EEXIST > exit() > > 2) very unlikely but still possible case > > process A process B > > main() > pidfile_open() -> success main() > perform_initialization() pidfile_open() -> EAGAIN > daemon() perform_initialization() > pidfile_write() -> success daemon() > perform_work() perform_work() > > The problem is that most of them (at least the ones I checked) ignore a > pidfile_open() failure unless errno == EEXIST. > > How do we fix this? My suggestion is to loop until pidfile_open() > succeeds or errno != EAGAIN. Does anyone have any objections to that > approach? I think we already do that internally in pidfile_open(). Can you take a look at the source and confirm that this is what you mean? -- Pawel Jakub Dawidek http://www.wheelsystems.com FreeBSD committer http://www.FreeBSD.org Am I Evil? Yes, I Am! http://yomoli.com
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:19 UTC