計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)

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 */



計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)
海洋大循環分野
daigo@ocg.aori.u-tokyo.ac.jp