leyu zhu created THRIFT-4404:
--------------------------------
Summary: Is TSSLSocket is thred-safe in thift version 0.9.3?
Key: THRIFT-4404
URL: https://issues.apache.org/jira/browse/THRIFT-4404
Project: Thrift
Issue Type: Question
Components: C++ - Library
Affects Versions: 0.9.3
Environment: Thrift running in Linux, C++
Reporter: leyu zhu
In my project, the thrift version 0.9.3 is used.
In the thrift client side, the processor.process(proto, proto, NULL) is called
to handle the callback event from server side in one separate thread. (Complete
function is below in Docs text)
>From another thread, when the application close, the
>proto->getTransport()->close() is called to terminate the above
>processor.process(proto, proto, NULL).
Without TLS enabled, the program running very stable.
But if TLS enabled between thrift server and client, at the end of the running,
about 1/2000 possibility, the program could get segement error-"Program
received signal SIGSEGV, Segmentation fault.", the call stack from GDB is below.
>From the call stack, can seehe error is from the method uint32_t
>TSSLSocket::read(uint8_t* buf, uint32_t len), in which the "bytes =
>SSL_read(ssl_, buf, len) " trigger the Segmentation fault, seems the ssl_
>could be released during the executing of SSL_read.
Any friends have seen the similar issue or Is TSSLSocket is thred-safe in thift
version 0.9.3?
======================GDB trace================================
(gdb) bt full#0 0x00007fffe40a41f0 in ?? ()No symbol table info available.#1
0x00007ffff6d298ff in BIO_read () from
/app/openssl/1.0.1e/LMWP3/lib/libcrypto.so.1.0.0No symbol table info
available.#2 0x00007ffff704ba16 in ssl3_read_n () from
/app/openssl/1.0.1e/LMWP3/lib/libssl.so.1.0.0No symbol table info available.#3
0x00007ffff704bf6c in ssl3_read_bytes () from
/app/openssl/1.0.1e/LMWP3/lib/libssl.so.1.0.0No symbol table info available.#4
0x00007ffff704915a in ssl3_read () from
/app/openssl/1.0.1e/LMWP3/lib/libssl.so.1.0.0No symbol table info available.#5
0x00007ffff6054975 in apache::thrift::transport::TSSLSocket::read
(this=0x7fffe408c990, buf=0x7fffe408ced0 "", len=512) at
src/thrift/transport/TSSLSocket.cpp:336 errno_copy = <optimized out>
error = <optimized out> errors = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> =
{<No data fields>}, <No data fields>}, _M_p = 0x0}} retries = 1
bytes = 0#6 0x00007ffff605ad54 in read (len=<optimized out>, buf=<optimized
out>, this=<optimized out>) at ./src/thrift/transport/TTransport.h:105No
locals.#7 apache::thrift::transport::TBufferedTransport::readSlow
(this=0x7fffe40885c0, buf=0x7ffff1b75cd0 "", len=4) at
src/thrift/transport/TBufferTransports.cpp:59 have = 0
__PRETTY_FUNCTION__ = "virtual uint32_t
apache::thrift::transport::TBufferedTransport::readSlow(uint8_t*, uint32_t)"
SSL_READ_RETURN = 4294967295 reading_bytes = <optimized out>#8
0x000000000049b7cd in read (len=4, buf=0x7ffff1b75cd0 "", this=0x7fffe40885c0)
at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/transport/TBufferTransports.h:71
new_rBase = 0x7fffe408ced5 "tionalModeizeNotificationChannel"#9
apache::thrift::transport::readAll<apache::thrift::transport::TBufferBase>
(trans=..., buf=0x7ffff1b75cd0 "", len=len@entry=4) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/transport/TTransport.h:41
have = 0 get = <optimized out>#10 0x000000000049b8ac in readAll
(len=4, buf=<optimized out>, this=0x7fffe40885c0) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/transport/TBufferTransports.h:84
new_rBase = 0x7fffe408ced5 "tionalModeizeNotificationChannel"#11
readAll (len=4, buf=<optimized out>, this=0x7fffe40885c0) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/transport/TBufferTransports.h:264No
locals.#12
apache::thrift::transport::TVirtualTransport<apache::thrift::transport::TBufferedTransport,
apache::thrift::transport::TBufferBase>::readAll_virt (this=0x7fffe40885c0,
buf=<optimized out>, len=4) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/transport/TVirtualTransport.h:92No
locals.#13 0x00000000004c28dc in readAll (len=4, buf=0x7ffff1b75cd0 "",
this=<optimized out>) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/transport/TTransport.h:121No
locals.#14 readI32 (i32=<synthetic pointer>, this=0x7fffe408c6b0) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/protocol/TBinaryProtocol.tcc:371
theBytes = {b = "\000\000\000", all = 0}#15
apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport,
apache::thrift::protocol::TNetworkBigEndian>::readMessageBegin
(this=0x7fffe408c6b0, name=..., messageType=@0x7ffff1b75d58:
apache::thrift::protocol::T_ONEWAY, seqid=@0x7ffff1b75d5c: 0) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/protocol/TBinaryProtocol.tcc:203
result = 0 sz = <optimized out>#16 0x00000000004c2ac1 in
apache::thrift::protocol::TVirtualProtocol<apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport,
apache::thrift::protocol::TNetworkBigEndian>,
apache::thrift::protocol::TProtocolDefaults>::readMessageBegin_virt
(this=<optimized out>, name=..., messageType=<optimized out>, seqid=<optimized
out>) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/protocol/TVirtualProtocol.h:403No
locals.#17 0x00000000004ab0ee in readMessageBegin (seqid=@0x7ffff1b75d5c: 0,
messageType=@0x7ffff1b75d58: apache::thrift::protocol::T_ONEWAY, name=...,
this=0x7fffe408c6b0) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/protocol/TProtocol.h:431No
locals.#18 process (connectionContext=0x0, out=<error reading variable: access
outside bounds of object referenced via synthetic pointer>, in=<error reading
variable: access outside bounds of object referenced via synthetic pointer>,
this=0x7ffff1b75d80) at
/home/eleyzhu/repo/lm/3pp/thrift-0.9.3.native-x86_64_Debug/install/usr/local/include/thrift/TDispatchProcessor.h:114
fname = {static npos = <optimized out>, _M_dataplus =
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data
fields>}, <No data fields>}, _M_p = 0x971d78 ""}} mtype =
apache::thrift::protocol::T_ONEWAY seqid = 0#19
lmclient::ThriftClient<com::ericsson::licensing::lm::LicensingControlExtendedIf>::callbackThreadFunction
(this=0x7fffffffb1b0, proto=...) at
/home/eleyzhu/repo/lm/src/lmServer/src/thriftAPI/fet/ThriftClient.h:1005
__func__ = "callbackThreadFunction" processor =
{<apache::thrift::TDispatchProcessor> = {<apache::thrift::TProcessor> =
{_vptr.TProcessor = 0x969030 <vtable for
com::ericsson::licensing::lm::LicensingNotificationsProcessor+16>,
eventHandler_ = {px = 0x0, pn = { pi_ = 0x0}}}, <No data
fields>}, iface_ = {px = 0x7fffe4081e70, pn = {pi_ = 0x7fffe4081e50}},
processMap_ = {_M_t = { _M_impl =
{<std::allocator<std::_Rb_tree_node<std::pair<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, void
(com::ericsson::licensing::lm::LicensingNotificationsProcessor::*)(int,
apache::thri---Type <return> to continue, or q <return> to
quit---ft::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)>
> >> =
{<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, void
(com::ericsson::licensing::lm::LicensingNotificationsProcessor::*)(int,
apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*,
void*)> > >> = {<No data fields>}, <No data fields>},
_M_key_compare = {<std::binary_function<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
std::char_traits<char>, std::all
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)