ソラリスの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未満の値を返しますか?