Issue #7584 has been updated by bpot (Bob Potter).


For what it's worth, we were able to work around this by explicitly shutting down ssl connections instead of letting it happen during GC.
----------------------------------------
Bug #7584: Ruby hangs when shutting down an ssl connection in gc finalization
https://bugs.ruby-lang.org/issues/7584#change-36570

Author: bpot (Bob Potter)
Status: Assigned
Priority: Normal
Assignee: MartinBosslet (Martin Bosslet)
Category: ext
Target version: 2.0.0
ruby -v: ruby 1.9.3p327 (2012-11-10) [i686-linux] 


It appears that during garbage collection ruby will sometimes attempt to shutdown an ssl connection that has already been shutdown. At least in certain cases this causes the SSL_shutdown call to block forever.

(gdb) bt
#0  0xb76fa424 in __kernel_vsyscall ()
#1  0xb740d17b in read () from /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6
#2  0xb6faabae in ?? () from /lib/i386-linux-gnu/libcrypto.so.1.0.0
#3  0xb6fa8412 in BIO_read () from /lib/i386-linux-gnu/libcrypto.so.1.0.0
#4  0xb70c3157 in ?? () from /lib/i386-linux-gnu/libssl.so.1.0.0
#5  0xb70c42d5 in ?? () from /lib/i386-linux-gnu/libssl.so.1.0.0
#6  0xb70c1371 in ?? () from /lib/i386-linux-gnu/libssl.so.1.0.0
#7  0xb70dc931 in SSL_shutdown () from /lib/i386-linux-gnu/libssl.so.1.0.0
#8  0xb711ba9d in ossl_ssl_shutdown (ssl=0xb21c1f18) at ossl_ssl.c:987
#9  0xb711bb31 in ossl_ssl_free (ssl=0xb21c1f18) at ossl_ssl.c:998
#10 0xb753bba5 in run_final (obj=229474180, objspace=<optimized out>) at gc.c:2932
#11 finalize_list (objspace=0x98805c0, p=0xdad7f84) at gc.c:1946
(gdb) f 9
#9  0xb711bb31 in ossl_ssl_free (ssl=0xb21c1f18) at ossl_ssl.c:998
998     in ossl_ssl.c
(gdb) p (*ssl).shutdown
$8 = 1

I'm not sure exactly what is causing this condition, but it seems like we should be checking if the connection is already shutdown (ssl_get_shutdown()) before trying to shut it down in ossl_ssl_free.


-- 
http://bugs.ruby-lang.org/