0

ソラリスの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);
}

非常にまれなケースですが、この失敗したテストが原因で、システムの1つにあるapacheが終了します。これは、fcntlによって返された-1未満の負の値が原因であると思われます。

では、solarisのfcntlはいつ-1未満の値を返しますか?

4

1 に答える 1

0
  1. コード サンプルでは、​​fcntl が <0 (たとえば -1) を返します。これは、errno が EINTR でない場合にエラーが発生する可能性があることを意味し、errno == EINTR (中断) の場合、エラーではなく、再試行することをお勧めします。
  2. 「solaris の fcntl の Mannul から、正常に完了すると、F_SETLKW に返される値は -1 以外の値になります」、つまり、成功すると 0 または >0 が返されます。">=0" は -1 以外の値であり、< ではありません。ご想像のとおり -1 です。
于 2009-10-13T05:51:21.107 に答える