While debugging my own daemon I noticed that pidfile_open does not perform the appropriate checks for a running daemon if the caller does not provide a pidptr to pidfile_open
fd = flopen(pfh->pf_path, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NONBLOCK, mode); fails when another daemon holds the lock and flopen sets errno to EAGAIN, the check 4 lines below in if (errno == EWOULDBLOCK && pidptr != NULL) { means that the pidfile_read is never executed. This results in my second daemon receiving an EAGAIN which clearly was meant to report a race condition between two daemons starting at the same time and the first one not yet finishing pidfile_write. The expected behavior would be to set errno to EEXIST, even if no pidptr was passed. Regards, erdgeist _______________________________________________ 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"