Skip to content

Commit 6e78c91

Browse files
committed
Merge pull request #168 from masaedw/master
Call close in ensure
2 parents 637e392 + c85d6e6 commit 6e78c91

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

ext/sqlite3/database.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ utf16_string_value_ptr(VALUE str)
3030
return RSTRING_PTR(str);
3131
}
3232

33+
static VALUE sqlite3_rb_close(VALUE self);
34+
3335
/* call-seq: SQLite3::Database.new(file, options = {})
3436
*
3537
* Create a new Database object that opens the given file. If utf16
@@ -120,8 +122,7 @@ static VALUE initialize(int argc, VALUE *argv, VALUE self)
120122
#endif
121123

122124
if(rb_block_given_p()) {
123-
rb_yield(self);
124-
rb_funcall(self, rb_intern("close"), 0);
125+
rb_ensure(rb_yield, self, sqlite3_rb_close, self);
125126
}
126127

127128
return self;

test/test_database.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,18 @@ def test_block_closes_self
109109
assert thing.closed?
110110
end
111111

112+
def test_block_closes_self_even_raised
113+
thing = nil
114+
begin
115+
SQLite3::Database.new(':memory:') do |db|
116+
thing = db
117+
raise
118+
end
119+
rescue
120+
end
121+
assert thing.closed?
122+
end
123+
112124
def test_prepare
113125
db = SQLite3::Database.new(':memory:')
114126
stmt = db.prepare('select "hello world"')

0 commit comments

Comments
 (0)