对于F_SETLKW,solaris中的fcntl何时返回小于-1的值

时间:2009-10-13 05:03:12

标签: apache solaris fcntl

来自solaris的fcntl的Mannul,成功完成后,返回的值为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将退出此次失败的测试。我怀疑这是由fcntl返回的负值小于-1引起的。

那么,solaris中的fcntl何时会返回小于-1的值?

1 个答案:

答案 0 :(得分:0)

  1. 在你的代码示例中,fcntl返回&lt; 0(例如-1你知道)意味着如果errno不是EINTR可能有错误,并且如果errno == EINTR(中断),则不是错误,只是建议再次重试
  2. “来自solaris的fcntl的Mannul,成功完成后,返回的值为F_SETLKW将为除-1以外的值”,表示成功时返回0或> 0,“&gt; = 0”是除此之外的值-1,而不是&lt; -1,因为你猜对了。