I have have several forked processes simultateously accessing the data area with the following function, and it all goes horribly wrong. def extract(dest,name,mode) User.asroot { start=0 fn = path(dest,name) File.open(fn,File::CREAT|File::WRONLY,mode) { |file| DATA.rewind DATA.each { |line| if start==0 start=1 if line =~ %r{^=begin #{name} -*} else break if line =~ %r{^=end -*} yield line if block_given? file.puts line end } } } end Each process gets partial or corrupt data. Now it obviously has something to do with the DATA object being shared between processes somehow (there is presumably a file handle in there somewhere), but how can I fix it? Andrew Walrond