[#2139] Best way to install ri documentation — Dave Thomas <dave@...>
Folks:
On Monday, January 5, 2004, 2:29:57 AM, Dave wrote:
Hi,
Perhaps make it available for mirrors and save ruby-lang's bandwidth?
Hi,
So, I'm thinking about doing the following? Is this OK with everyone?
Hi,
On Tue, 6 Jan 2004 00:47:41 +0900
On Mon, 12 Jan 2004 23:30:52 +0900
On Tue, Jan 13, 2004 at 12:01:38AM +0900, Dave Thomas wrote:
Hi, Dave,
Hi,
Hi, daz,
On Tuesday, 6 January 2004 at 15:02:50 +0900, NAKAMURA, Hiroshi wrote:
[#2163] Occasional --enable-pthread hangs... — Nathaniel Talbott <nathaniel@...>
First of all, thanks so much to all those that have helped with
On Jan 5, 2004, at 21:49, Nathaniel Talbott wrote:
[#2186] Absolute paths in shebang lines? — "J.Herre" <jlst@...>
What would the reaction be to reconsidering the following proposal?
[#2194] File.readable_world? and File.writable_world? — Ian Macdonald <ian@...>
Hello,
On Fri, Jan 09, 2004 at 06:02:07PM +0900, Ian Macdonald wrote:
On Fri 09 Jan 2004 at 23:10:02 +0900, Eivind Eklund wrote:
Hi,
On Sun 11 Jan 2004 at 00:47:33 +0900, Yukihiro Matsumoto wrote:
Hi,
On Sun 11 Jan 2004 at 21:40:22 +0900, Yukihiro Matsumoto wrote:
Hi,
On Mon 12 Jan 2004 at 10:31:52 +0900, Yukihiro Matsumoto wrote:
Hi,
On Mon 12 Jan 2004 at 22:36:16 +0900, Yukihiro Matsumoto wrote:
On Mon 12 Jan 2004 at 10:31:52 +0900, Yukihiro Matsumoto wrote:
On Sun 11 Jan 2004 at 00:47:33 +0900, Yukihiro Matsumoto wrote:
[#2211] xxx_init_copy — Dave Thomas <dave@...>
I notivce that there're a bunch of new xxx_init_copy methods: RDoc is
Hi,
Hi,
Hi,
Hi,
[#2216] ruby aborts in data-handling applications — xsdg <xsdg@...>
I reported a similar bug about 2 or 3 months ago. The problem seemed to go
Hi,
I've finally found a combination that will reliably segfault. Since my first post on this topic, I've switched the backend from BDB to GDBM.
Hi,
On Mon, Jan 19, 2004 at 11:32:59AM +0900, nobu.nokada@softhome.net wrote:
[#2225] Fwd: [ruby-cvs] ruby: * file.c (test_wr, test_ww): New functions implementing new — Dave Thomas <dave@...>
On Mon 12 Jan 2004 at 23:38:29 +0900, Dave Thomas wrote:
[#2251] YAML_Unit_Tests failed — "NAKAMURA, Hiroshi" <nahi@...>
Hi,
[#2285] A suggestion for libraries such as base64.rb — Dave Thomas <dave@...>
Some of the older libraries simply insert stuff into the top-level
[#2305] Time#usec round trip problem — Minero Aoki <aamine@...>
Hi,
[#2306] YAML.dump("a".."z") — Minero Aoki <aamine@...>
Hi,
CGI::Session FileStore patch
I tend to fork off long-running processes from CGI scripts. The
problem with these is that unless I specifically remember to close the
CGI::Session file, the broken locking logic in the FileStore class
prevents a user who just caused one of those processes to be forked
off to be stuck waiting on a lock that shouldn't be a problem at all.
I've proposed a patch to fix the locking problem on ruby-talk several
times, but got no response at all. I'm hoping at least here someone
will tell me why I'm wrong to do it this way. At best, I'd like to
see this go into 1.8.2.
Key features:
1) FileStore doesn't need to hold an open filehandle all the time.
This can cause several race conditions when locking files anyway.
I've removed this, and only open a file when I actually need to
read from or write to it. I can't see any real benefit to holding
it open all the time.
2) Locks were granted, but never released. By closing the file after
use, this releases the lock and also has the added benefit of
reducing the possibility for race conditions.
3) Restore used LOCK_EX when reading the file-- this is generally
regarded as incorrect. Reading processes can work fine with shared
locks; only writers need exclusive locks.
Here's the patch (to 1.8.1):
--- session-old.rb 2004-01-26 17:24:25.000000000 -0700
+++ session.rb 2004-01-26 17:33:40.000000000 -0700
@@ -364,16 +364,13 @@
unless check_id(id)
raise ArgumentError, "session_id `%s' is invalid" % id
end
- path = dir+"/"+prefix+id
- path.untaint
- unless File::exist? path
+ @path = dir+"/"+prefix+id
+ @path.untaint
+ if File::exist? @path
+ restore
+ else
@hash = {}
end
- begin
- @f = open(path, "r+")
- rescue Errno::ENOENT
- @f = open(path, "w+")
- end
end
# Restore session state from the session's FileStore file.
@@ -382,13 +379,17 @@
def restore
unless @hash
@hash = {}
- @f.flock File::LOCK_EX
- @f.rewind
- for line in @f
- line.chomp!
- k, v = line.split('=',2)
- @hash[CGI::unescape(k)] = CGI::unescape(v)
- end
+ begin
+ f = File.open(@path, 'r')
+ f.flock File::LOCK_SH
+ for line in f
+ line.chomp!
+ k, v = line.split('=',2)
+ @hash[CGI::unescape(k)] = CGI::unescape(v)
+ end
+ ensure
+ f.close unless f.nil?
+ end
end
@hash
end
@@ -396,25 +397,25 @@
# Save session state to the session's FileStore file.
def update
return unless @hash
- @f.rewind
- for k,v in @hash
- @f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v))
- end
- @f.truncate @f.tell
+ begin
+ f = File.open(@path, 'w')
+ f.lock File::LOCK_EX
+ for k,v in @hash
+ f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v))
+ end
+ ensure
+ f.close unless f.nil?
+ end
end
# Update and close the session's FileStore file.
def close
- return if @f.closed?
update
- @f.close
end
# Close and delete the session's FileStore file.
def delete
- path = @f.path
- @f.close
- File::unlink path
+ File::unlink @path
end
end
--
Eric Schwartz email: emschwar@hp.com
Hewlett-Packard Company Phone: +1 970 898 7443
Linux and Open Source Lab (LOSL)