Re: incorrect use of pidfile(3)

From: Pawel Jakub Dawidek <pjd_at_FreeBSD.org>
Date: Thu, 13 Oct 2011 13:30:26 +0200
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

Received on Thu Oct 13 2011 - 09:47:08 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:19 UTC