С тех пор, как Mannul из fcntl в solaris, после успешного завершения значение, возвращаемое для F_SETLKW, будет равно «Значение, отличное от -1».
Но исходный код Apache httpd 1.3.41 (http_main.c) проверяет, является ли возвращаемое значение положительным, например:
int ret;
while ((ret = fcntl(lock_fd, F_SETLKW, &unlock_it)) < 0 && errno == EINTR) {
/* nop */
}
if (ret < 0) {
ap_log_error(APLOG_MARK, APLOG_EMERG, server_conf,
"fcntl: F_SETLKW: Error getting accept lock, exiting! "
"Perhaps you need to use the LockFile directive to place "
"your lock file on a local disk!");
clean_child_exit(APEXIT_CHILDFATAL);
}
В очень редком случае apache в одной из наших систем выйдет из-за неудачного теста. Я подозреваю, что это было вызвано отрицательным значением меньше -1, возвращаемым fcntl.
Итак, когда fcntl в солярисе вернет значение меньше -1?