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?

DES
-- 
Dag-Erling Smørgrav - d...@des.no
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to