From a4d1031d932d31c932db5d3be8e07fc5359fe63b Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Sun, 7 Mar 2010 22:01:05 +0100 Subject: [PATCH] Weakhash: self cleaning cache. SBDB::Env#new: Hash-options added --- lib/sbdb/db.rb | 3 ++- lib/sbdb/environment.rb | 13 +++++++++++-- lib/sbdb/weakhash.rb | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/sbdb/db.rb b/lib/sbdb/db.rb index dc6fb4f..adede68 100644 --- a/lib/sbdb/db.rb +++ b/lib/sbdb/db.rb @@ -54,7 +54,8 @@ module SBDB @home, @db = opts[:env], opts[:env] ? opts[:env].bdb_object.db : Bdb::Db.new opts[:type] = TYPES.index(self.class) || UNKNOWN @db.re_len = opts[:re_len] if opts[:re_len] - begin @db.open opts[:txn], file, opts[:name], opts[:type], opts[:flags] || 0, opts[:mode] || 0 + begin + @db.open opts[:txn], file, opts[:name], opts[:type], opts[:flags] || 0, opts[:mode] || 0 rescue Object close raise $! diff --git a/lib/sbdb/environment.rb b/lib/sbdb/environment.rb index de9b3c5..94c4d63 100644 --- a/lib/sbdb/environment.rb +++ b/lib/sbdb/environment.rb @@ -41,9 +41,18 @@ module SBDB open Unknown, file, *p, &e end - def initialize dir = nil, flags = nil, mode = nil + # args: + # args[0] => dir + # args[1] => flags + # args[3] => mode + # possible options (via Hash): + # :dir, :flags, :mode, :log_config + def initialize *args + opts = ::Hash === args.last ? args.pop : {} + opts = {:dir => args[0], :flags => args[1], :mode => args[2]}.update opts @dbs, @env = WeakHash.new, Bdb::Env.new( 0) - begin @env.open dir || '.', flags || INIT_TRANSACTION | CREATE, mode || 0 + @env.log_config = opts[:log_config] if opts[:log_config] + begin @env.open opts[:dir]||'.', opts[:flags]|| INIT_TRANSACTION|CREATE, opts[:mode]||0 rescue Object close raise diff --git a/lib/sbdb/weakhash.rb b/lib/sbdb/weakhash.rb index 03e53f1..893b9c9 100644 --- a/lib/sbdb/weakhash.rb +++ b/lib/sbdb/weakhash.rb @@ -17,7 +17,7 @@ class WeakHash end @reclaim_key = lambda do |key_id| if @key_map.has_key? key_id - @cache.delete @key_map[key_id] + @cache.delete @key_map.delete(key_id) end end end