Когда fcntl в солярисе вернет значение меньше -1 для F_SETLKW - PullRequest
0 голосов
/ 13 октября 2009

С тех пор, как 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?

1 Ответ

0 голосов
/ 13 октября 2009
  1. в вашем примере кода fcntl возвращает <0 (например, -1, вы знаете) означает, что могут возникнуть ошибки, если errno не был EINTR, а если errno == EINTR (прервано), это не ошибка, просто предложите повторить попытку. </li>
  2. "Fromt he Mannul of fcntl in solaris. После успешного завершения значение, возвращаемое для F_SETLKW, будет иметь значение, отличное от -1", означающее, что в случае успеха возвращается 0 или> 0, "> = 0" - это значение, отличное от -1 не <-1, как вы уже догадались. </li>
...