Skip to content

Commit e84b777

Browse files
committed
Write better tests of the busy_handler_timeout
1 parent 17c9db8 commit e84b777

File tree

1 file changed

+48
-12
lines changed

1 file changed

+48
-12
lines changed

test/test_integration_pending.rb

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -113,32 +113,68 @@ def test_busy_timeout
113113
assert time.real*1000 >= 1000
114114
end
115115

116-
def test_busy_handler_timeout
117-
@db.busy_handler_timeout = 1000
118-
busy = Mutex.new
119-
busy.lock
116+
def test_busy_timeout_blocks_gvl
117+
t1 = Thread.new do
118+
begin
119+
db1 = SQLite3::Database.open( "test.db" )
120+
db1.transaction( :exclusive ) do
121+
sleep 0.05
122+
end
123+
ensure
124+
db1.close if db1
125+
end
126+
end
120127

121-
t = Thread.new do
128+
t2 = Thread.new do
122129
begin
123130
db2 = SQLite3::Database.open( "test.db" )
131+
db2.busy_timeout 1000
132+
# db2.busy_handler do |count|
133+
# sleep 0.001
134+
# end
124135
db2.transaction( :exclusive ) do
125-
busy.lock
136+
sleep 0.01
126137
end
127138
ensure
128139
db2.close if db2
129140
end
130141
end
131142

132-
sleep 1
133143
time = Benchmark.measure do
134-
assert_raise( SQLite3::BusyException ) do
135-
@db.execute "insert into foo (b) values ( 'from 2' )"
144+
[t1, t2].each(&:join)
145+
end
146+
147+
assert time.real >= 1
148+
end
149+
150+
def test_busy_handler_timeout_releases_gvl
151+
t1 = Thread.new do
152+
begin
153+
db1 = SQLite3::Database.open( "test.db" )
154+
db1.transaction( :exclusive ) do
155+
sleep 0.05
156+
end
157+
ensure
158+
db1.close if db1
136159
end
137160
end
138161

139-
busy.unlock
140-
t.join
162+
t2 = Thread.new do
163+
begin
164+
db2 = SQLite3::Database.open( "test.db" )
165+
db2.busy_handler_timeout = 1000
166+
db2.transaction( :exclusive ) do
167+
sleep 0.01
168+
end
169+
ensure
170+
db2.close if db2
171+
end
172+
end
141173

142-
assert time.real*1000 >= 1000
174+
time = Benchmark.measure do
175+
[t1, t2].each(&:join)
176+
end
177+
178+
assert time.real < 1
143179
end
144180
end

0 commit comments

Comments
 (0)