File tree Expand file tree Collapse file tree 1 file changed +48
-12
lines changed Expand file tree Collapse file tree 1 file changed +48
-12
lines changed Original file line number Diff line number Diff 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
144180end
You can’t perform that action at this time.
0 commit comments