ruby-listのcgi/sessionについての
話を追いかけていて気付いたのですが

  ruby -rcgi/session -e 's=CGI::Session.new(CGI.new,"session_id"=>"abc"); s.close;'

を2回実行すると2回目の実行で

  /usr/lib/ruby/1.6/cgi/session.rb:139:in `update': undefined method `each' for nil (NameError)
	  from /usr/lib/ruby/1.6/cgi/session.rb:147:in `close'
	  from /usr/lib/ruby/1.6/cgi/session.rb:92:in `close'
	  from -e:1

という例外が発生します。

FileStoreで、セッションに対応するファイルが見付かった場合、
@hashが初期化されず、そのまま何もせずcloseされるとupdateでおちる
ということのようです。

こうすると問題を回避できるのですが、どんなものでしょう?

Index: lib/cgi/session.rb
===================================================================
RCS file: /home/akira/.cvsup.d/ruby/ruby/lib/cgi/session.rb,v
retrieving revision 1.6.2.7
diff -u -r1.6.2.7 session.rb
--- lib/cgi/session.rb	1 Dec 2001 14:07:01 -0000	1.6.2.7
+++ lib/cgi/session.rb	4 Apr 2002 04:05:40 -0000
@@ -134,6 +134,7 @@
       end
 
       def update
+	return unless @hash
 	@f.rewind
 	for k,v in @hash
 	  @f.printf "%s=%s\n", CGI::escape(k), CGI::escape(v)

-- 
akira yamada