@@ -516,39 +516,44 @@ local function test_underlying_conn_closed_during_gc(test)
516
516
test :ok (ffi .C .fcntl (handle , F_GETFD ) == - 1 , ' descriptor is closed' )
517
517
end
518
518
519
- local function test_block_fiber1 (conn )
520
- print (' fiber1' )
521
- conn :execute (' SELECT sleep(0.01)' )
522
- print (' fiber 1 end' )
523
- end
524
-
525
519
local fiber_2
526
520
527
521
local function test_block_fiber2 (conn )
528
- print (' fiber2' )
529
522
fiber_2 = fiber .self ()
530
523
for _ = 1 , 2 do
531
524
conn :execute (' SELECT sleep(0.01)' )
532
525
end
533
- print (' fiber 2 end' )
534
- end
535
-
536
- local function test_block_fiber3 (pool , conn )
537
- print (' fiber3' )
538
- pool :put (conn )
539
- print (' fiber 3 end' )
540
526
end
541
527
542
528
local function test_block_fiber_inf (test , pool )
543
- test :plan (1 )
529
+ test :plan (2 )
530
+ -- Check that the second fiber is not blocked infinitely, when
531
+ -- the third fiber do pool:put(conn) or conn:close().
544
532
local conn = pool :get ()
545
- fiber .create (test_block_fiber1 , conn )
533
+ -- First.
534
+ fiber .create (conn .execute , conn , ' SELECT sleep(0.01)' )
535
+ -- Second.
536
+ fiber .create (test_block_fiber2 , conn )
537
+ -- Third.
538
+ fiber .create (pool .put , pool , conn )
539
+ while fiber .status (fiber_2 ) ~= ' dead' do
540
+ fiber .sleep (0 )
541
+ end
542
+ test :ok (fiber .status (fiber_2 ) == ' dead' , ' fiber is not blocked' )
543
+
544
+ local conn , err = mysql .connect ({ host = host , port = port , user = user ,
545
+ password = password , db = db })
546
+ if conn == nil then error (err ) end
547
+ -- First.s
548
+ fiber .create (conn .execute , conn , ' SELECT sleep(0.01)' )
549
+ -- Second.
546
550
fiber .create (test_block_fiber2 , conn )
547
- fiber .create (test_block_fiber3 , pool , conn )
551
+ -- Third.
552
+ fiber .create (conn .close , conn )
548
553
while fiber .status (fiber_2 ) ~= ' dead' do
549
554
fiber .sleep (0 )
550
555
end
551
- test :ok (true , ' fiber is not blocked' )
556
+ test :ok (fiber . status ( fiber_2 ) == ' dead ' , ' fiber is not blocked' )
552
557
end
553
558
554
559
local test = tap .test (' mysql connector' )
0 commit comments