計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)
CERN httpd キャッシュサーババグ修正
《古い》
当方でも CERN httpd 3.0 を proxy+cache として使っているのですが、古い
httpd プロセスが増えてカーネルのテーブルが溢れてしまったことがあり、と
りあえず以下のようなパッチを当てました。 この内、HTgc.c へのパッチは別
の問題 (キャッシュディレクトリに MSB の立った文字を名前に含むファイル
やディレクトリができると、ガーベジコレクションが失敗すること)への対応
ですが、これも当てておいた方が無難だと思います。
*** WWW/Daemon/Implementation/HTgc.c.ORG Fri Aug 12 19:36:39 1994
--- WWW/Daemon/Implementation/HTgc.c Fri Nov 3 12:39:30 1995
***************
*** 168,179 ****
PRIVATE int hash ARGS1(char *, url)
{
! int h = 0;
char * cur = url;
if (!url) return 0;
for( ; *cur; cur++)
! h += *cur;
return h % HASH_SIZE;
}
--- 168,179 ----
PRIVATE int hash ARGS1(char *, url)
{
! unsigned int h = 0;
char * cur = url;
if (!url) return 0;
for( ; *cur; cur++)
! h += (unsigned int)*cur;
return h % HASH_SIZE;
}
*** WWW/Library/Implementation/HTFormat.c.ORG Thu Sep 29 22:24:15 1994
--- WWW/Library/Implementation/HTFormat.c Mon Jun 10 16:31:14 1996
***************
*** 51,56 ****
--- 51,84 ----
#include "HTGuess.h"
#include "HTError.h"
+ #undef NETREAD
+ PRIVATE int NETREAD(fd, buf, size)
+ int fd;
+ char *buf;
+ int size;
+ {
+ fd_set read_socks;
+ struct timeval max_wait;
+ int status;
+
+ if (size == 0)
+ return read(fd, buf, size);
+
+ FD_ZERO(&read_socks);
+ FD_SET(fd, &read_socks);
+ max_wait.tv_sec = 1200; /* 20 min */
+ max_wait.tv_usec = 0;
+
+ status = select(fd+1, &read_socks, (fd_set *) NULL,
+ (fd_set *) NULL, &max_wait);
+
+ if (status == 1)
+ return read(fd, buf, size);
+
+ errno = EINTR;
+ return -1;
+ }
+ #endif
PUBLIC BOOL HTOutputSource = NO; /* Flag: shortcut parser to stdout */
計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)