[ 
https://issues.apache.org/jira/browse/THRIFT-4404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James E. King III closed THRIFT-4404.
-------------------------------------
    Resolution: Information Provided
      Assignee: James E. King III

Hi, sorry nobody's answered your question.   In the C++ library none of the 
transport layers should be used by multiple threads simultaneously.

I think the answer would depend on whether the OpenSSL library version in use 
was thread-safe, and whether we configured it correctly. 

> 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
>            Assignee: James E. King III
>            Priority: Major
>
> 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
(v7.6.3#76005)

Reply via email to