I am using ruby 1.8.1 and yaml to store data records.  After a few minutes I
get one of the following error messages.

/usr/lib/ruby/1.8/yaml.rb:39: [BUG] rb_gc_mark(): unknown data type
0x0(0x40184108) non object
ruby 1.8.1 (2003-12-25) [i686-linux]

Aborted

OR

/usr/lib/ruby/1.8/yaml.rb:193: [BUG] Segmentation fault
ruby 1.8.1 (2003-12-25) [i686-linux]

Aborted

I am using two threads to access the data I am writing.  Here is my file ...

require 'thread'
require 'yaml'
require 'yaml/store'

$dataMutex = Mutex.new

class DataClass

	def initialize( time, device, countOne=0, countTwo=0 )
		@time = time
		@device = device
		@countOne = countOne
		@countTwo = countTwo
	end

	def getName
		"device#{@device.to_s}"
	end

	def writeInfo
		begin
			ext = sprintf( "%2.2d%2.2d%2.2d%2.2d%2.2d%2.2d",
@time.year, @time.mon, @time.day, @time.hour, @time.min, @time.sec )
			filename = getName + "." + ext
			store = YAML::Store.new( filename )
			print "file: #{filename}\n"
			store.transaction do
				store['Device'] = @device
				store['Time'] = @time
				store['countOne'] = @countOne
				store['countTwo'] = @countTwo
			end
		rescue => e
			print "message #{e.message}  backtrace
#{e.backtrace}"
		end
	end
end


def doThreadOne
	begin
		doThreadTwo
		while true do 
			$dataMutex.synchronize do
				$dataArray.each do |dataItem|
					print "ThreadOne: writeInfo\n"
					dataItem.writeInfo
				end
				sleep 0.2
			end
		end
	rescue => e
		print "message #{e.message}  backtrace #{e.backtrace}"
	end
end

def doThreadTwo
	begin
		$ThreadTwo = Thread.new do
			while true do
				$dataMutex.synchronize do
					$dataArray.each do |dataItem|
						print "ThreadTwo:
writeInfo\n"
						dataItem.writeInfo
					end
				sleep 0.2
				end
			end
		end
	rescue => e
		print "message #{e.message}  backtrace #{e.backtrace}"
	end
end	


$dataArray = []
begin
	for channel in	0..23
		t = Time.now
		$dataArray[ channel ]  = DataClass.new( t, channel )
	end

	doThreadOne
rescue => e
end


Any suggestions or hints??

Thanks--
Carol Almquist