- /* Rename or link it to the correct name. */
- if (overwrite_pidfile) {
- if (rename(tmpfile, pidfile) < 0) {
- VLOG_FATAL("failed to rename \"%s\" to \"%s\" (%s)",
- tmpfile, pidfile, strerror(errno));
- }
- } else {
- do {
- error = link(tmpfile, pidfile) == -1 ? errno : 0;
- if (error == EEXIST) {
- check_already_running();
- }
- } while (error == EINTR || error == EEXIST);
- if (error) {
- VLOG_FATAL("failed to link \"%s\" as \"%s\" (%s)",
- tmpfile, pidfile, strerror(error));
- }
+ /* Due to a race, 'tmpfile' may be owned by a different process, so we
+ * shouldn't delete it on exit. */
+ fatal_signal_remove_file_to_unlink(tmpfile);
+
+ if (error < 0) {
+ VLOG_FATAL("failed to rename \"%s\" to \"%s\" (%s)",
+ tmpfile, pidfile, strerror(errno));