Hi all,
I have a C++ client which uses thrift to publish data to a remote server.
When the remote server shut down, I catch an exception to see if I can
re-connect to it periodically. However, in deallocating memory before
re-initializing a client again, the client code always crashes. I debugged
the issue and got the following stack trace:
(gdb) backtrace
#0 0x00007ffff713891d in write () at ../sysdeps/unix/syscall-template.S:82
#1 0x00007ffff68e4c95 in ?? () from
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
#2 0x00007ffff68e2ae7 in BIO_write () from
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
#3 0x00007ffff6bf9a50 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.0.0
#4 0x00007ffff6bfb483 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.0.0
#5 0x00007ffff6bf7b62 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.0.0
*#6 0x00007ffff7ba632a in apache::thrift::transport::TSSLSocket::close
(this=0x67cc30) at src/transport/TSSLSocket.cpp:145
#7 0x00007ffff7ba647c in
apache::thrift::transport::TSSLSocket::~TSSLSocket (this=0x67cc30,
__in_chrg=<optimized out>) at src/transport/TSSLSocket.cpp:100
#8 0x00007ffff7ba6559 in
apache::thrift::transport::TSSLSocket::~TSSLSocket (this=0x67cc30,
__in_chrg=<optimized out>) at src/transport/TSSLSocket.cpp:101*
#9 0x00007ffff7bace0a in release (this=0x6825c0) at
/usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:145
#10 ~shared_count (this=0x682190, __in_chrg=<optimized out>) at
/usr/include/boost/smart_ptr/detail/shared_count.hpp:217
#11 ~shared_ptr (this=0x682188, __in_chrg=<optimized out>) at
/usr/include/boost/smart_ptr/shared_ptr.hpp:168
#12 ~TBufferedTransport (this=0x682160, __in_chrg=<optimized out>) at
./src/transport/TBufferTransports.h:191
#13 apache::thrift::transport::TBufferedTransport::~TBufferedTransport
(this=0x682160, __in_chrg=<optimized out>) at
./src/transport/TBufferTransports.h:191
#14 0x000000000042d487 in
boost::checked_delete<apache::thrift::transport::TBufferedTransport>
(x=0x682160) at /usr/include/boost/checked_delete.hpp:34
#15 0x000000000042e1e4 in
boost::detail::sp_counted_impl_p<apache::thrift::transport::TBufferedTransport>::dispose
(this=0x67df80)
at /usr/include/boost/smart_ptr/detail/sp_counted_impl.hpp:78
Please note that I have only added the relevant part of the stack trace. I
have attached the complete one.
In analyzing what is happening here, what I could grasp is that after the
connection to the server is terminated, if socket::close method gets called
the application crashes. Is this the expected behavior? Since this is
happening implicitly because of the memory cleanup, how to handle this
issue?
--
Thanks and Regards,
Isuru