I'm having trouble figuring out how to do transactions. I'm using db
4.5.40 from Oracle and bdb 0.6.0. Here's a code snippet:

require 'bdb'

BDB::Hash.open('models.db', nil, BDB::TRUNCATE) {}
BDB::Hash.open('makes.db', nil, BDB::TRUNCATE) {}

BDB::Env.open('db', BDB::CREATE | BDB::INIT_TRANSACTION) do |env|
  models = makes = nil
  env.begin(BDB::TXN_COMMIT) do |tx|
    models = tx.open_db(BDB::HASH, 'models.db', nil, BDB::CREATE)
    makes = tx.open_db(BDB::HASH, 'makes.db', nil, BDB::CREATE | BDB::DUPSORT)
    models.associate(makes) { |sdb, key, value| value }
  end

  env.begin(BDB::TXN_COMMIT) do |tx|
    tx.assoc(models, makes)
    puts '===== Before'
    puts '----- models'
    models.each { |key, value| puts "#{key} = #{value}" }
    puts '----- makes'
    makes.each { |key, value| puts "#{key} = #{value}" }
  end

  env.begin(BDB::TXN_COMMIT) do |tx|
    tx.assoc(models, makes)
    models['Civic'] = 'Honda'
    models['Accord'] = 'Honda'   # this is line 26 where the error is occurring
    models['S2000'] = 'Honda'
    models['Camry'] = 'Toyota'
    models['Solara'] = 'Toyota'
  end

  env.begin do |tx|
    tx.assoc(models, makes)
    puts '===== After'
    puts '----- models'
    models.each { |key, value| puts "#{key} = #{value}" }
    puts '----- makes'
    makes.each { |key, value| puts "#{key} = #{value}" }
  end

  makes.close
  models.close
end

Now I have no idea if I'm using transactions properly, not to mention
any of the other various features, but I suspect I'm not since I get
this output:

===== Before
----- models
----- makes
/home/jim/eclipse/testRuby/test.rb:26:in `close': BUG : current_env
not set (BDB::Fatal)
        from /home/jim/eclipse/testRuby/test.rb:26:in `open'
        from /home/jim/eclipse/testRuby/test.rb:6
/home/jim/eclipse/testRuby/test.rb:26: [BUG] Segmentation fault
ruby 1.8.5 (2007-03-13) [i386-linux]

I would greatly appreciate any help that anyone can provide.

Cheers,
Jim