Index: lib/libutil/pidfile.c =================================================================== --- lib/libutil/pidfile.c (wersja 248129) +++ lib/libutil/pidfile.c (kopia robocza) @@ -126,20 +126,25 @@ fd = flopen(pfh->pf_path, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NONBLOCK, mode); if (fd == -1) { - if (errno == EWOULDBLOCK && pidptr != NULL) { - count = 20; - rqtp.tv_sec = 0; - rqtp.tv_nsec = 5000000; - for (;;) { - errno = pidfile_read(pfh->pf_path, pidptr); - if (errno != EAGAIN || --count == 0) - break; - nanosleep(&rqtp, 0); + if (errno == EWOULDBLOCK) { + if (pidptr == NULL) { + errno = EEXIST; + } else { + count = 20; + rqtp.tv_sec = 0; + rqtp.tv_nsec = 5000000; + for (;;) { + errno = pidfile_read(pfh->pf_path, + pidptr); + if (errno != EAGAIN || --count == 0) + break; + nanosleep(&rqtp, 0); + } + if (errno == EAGAIN) + *pidptr = -1; + if (errno == 0 || errno == EAGAIN) + errno = EEXIST; } - if (errno == EAGAIN) - *pidptr = -1; - if (errno == 0 || errno == EAGAIN) - errno = EEXIST; } free(pfh); return (NULL);