Bhavik created THRIFT-4880:
------------------------------

             Summary: Crash in 
apache::thrift::protocol::TProtocol::writeMessageBegin(std::string const&, 
apache::thrift::protocol::TMessageType, int)+3)
                 Key: THRIFT-4880
                 URL: https://issues.apache.org/jira/browse/THRIFT-4880
             Project: Thrift
          Issue Type: Question
          Components: C++ - Library
    Affects Versions: 0.9.1
            Reporter: Bhavik


Working on android application using TThreadedServer protocol in our native 
code , observed crash within thrift autogenerated code for an RPC call 
process_client.

In 400 to 500 iterations it happens once, Frequency of occurrence is very low. 
otherwise code works fine most of the time it works properly.

Below are the details:

signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 7729f450

03-15 22:58:09.039  1600  1600 I DEBUG   :     r0 7729f458  r1 738a7c38  r2 
00000002  r3 00000000  
03-15 22:58:09.039  1600  1600 I DEBUG   :     r4 00000000  r5 738a7c38  r6 
738a7c0c  r7 7729f458  
03-15 22:58:09.041  1600  1600 I DEBUG   :     r8 7721be60  r9 738a7c3c  sl 
7729f45c  fp 738a7c14  
03-15 22:58:09.041  1600  1600 I DEBUG   :     ip 7729f450  sp 738a7c00  lr 
76f1fd7d  pc 7729f450  cpsr 000f0010  
03-15 22:58:09.042  1600  1600 I DEBUG   :     d0  0000000000000000  d1  
0000000000000000  
03-15 22:58:09.042  1600  1600 I DEBUG   :     d2  0000000000000000  d3  
0000000000000000  
03-15 22:58:09.043  1600  1600 I DEBUG   :     d4  6f4c3a3a72656761  d5  
206f4e203e206461  
03-15 22:58:09.044  1600  1600 I DEBUG   :     d6  72756769666e6f63  d7  
4052c00000000000  
03-15 22:58:09.045  1600  1600 I DEBUG   :     d8  0000000000000000  d9  
0000000000000000  
03-15 22:58:09.046  1600  1600 I DEBUG   :     d10 0000000000000000  d11 
0000000000000000  
03-15 22:58:09.047  1600  1600 I DEBUG   :     d12 0000000000000000  d13 
0000000000000000  
03-15 22:58:09.048  1600  1600 I DEBUG   :     d14 0000000000000000  d15 
0000000000000000  
03-15 22:58:09.049  1600  1600 I DEBUG   :     d16 00000000241f30a4  d17 
00000000241f30a4  
03-15 22:58:09.049  1600  1600 I DEBUG   :     d18 41cd063bbd000000  d19 
0000000000000000  
03-15 22:58:09.050  1600  1600 I DEBUG   :     d20 0000000000000000  d21 
0000000000000000  
03-15 22:58:09.051  1600  1600 I DEBUG   :     d22 0000000000000000  d23 
0000000000000000  
03-15 22:58:09.051  1600  1600 I DEBUG   :     d24 0000000000000000  d25 
0000000000000000  
03-15 22:58:09.051  1600  1600 I DEBUG   :     d26 0000000000000000  d27 
0000000000000000  
03-15 22:58:09.052  1600  1600 I DEBUG   :     d28 0000000000000000  d29 
0000000000000000  
03-15 22:58:09.053  1600  1600 I DEBUG   :     d30 0000000000000000  d31 
0000000000000000  
03-15 22:58:09.054  1600  1600 I DEBUG   :     scr 00000010  
03-15 22:58:09.056  1600  1600 I DEBUG   :   
03-15 22:58:09.056  1600  1600 I DEBUG   : backtrace:  
03-15 22:58:09.057  1600  1600 I DEBUG   :     #00  pc 000ec450  [heap]  
03-15 22:58:09.058  1600  1600 I DEBUG   :     #01  pc 00076d79  
/system/lib/libmanager.so 
(canmanager::thrift::TManagerBackendProcessor::process_Client(int, 
apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, 
void*)+244)  
03-15 22:58:09.058  1600  1600 I DEBUG   :   
03-15 22:58:09.058  1600  1600 I DEBUG   : stack:  
03-15 22:58:09.059  1600  1600 I DEBUG   :          738a7bc0  738a7c14  
[stack:3867]  
03-15 22:58:09.059  1600  1600 I DEBUG   :          738a7bc4  76ce49b1  
/vendor/lib/libc.so (malloc+12)  
03-15 22:58:09.060  1600  1600 I DEBUG   :          738a7bc8  3ffffffc    
03-15 22:58:09.060  1600  1600 I DEBUG   :          738a7bcc  0000000e    
03-15 22:58:09.060  1600  1600 I DEBUG   :          738a7bd0  76f388b2  
/system/lib/libmanager.so  
03-15 22:58:09.060  1600  1600 I DEBUG   :          738a7bd4  772a0428  [heap]  
03-15 22:58:09.060  1600  1600 I DEBUG   :          738a7bd8  7729f458  [heap]  
03-15 22:58:09.060  1600  1600 I DEBUG   :          738a7bdc  76e504a7  
/system/lib/libgnustl_shared.so (char* std::string::_S_construct<char 
const*>(char const*, char const*, std::allocator<char> const&, 
std::forward_iterator_tag)+62)  
03-15 22:58:09.061  1600  1600 I DEBUG   :          738a7be0  76f388b2  
/system/lib/libmanager.so  
03-15 22:58:09.061  1600  1600 I DEBUG   :          738a7be4  738a7c38  
[stack:3867]  
03-15 22:58:09.061  1600  1600 I DEBUG   :          738a7be8  738a7c0c  
[stack:3867]  
03-15 22:58:09.062  1600  1600 I DEBUG   :          738a7bec  76e507ab  
/system/lib/libgnustl_shared.so (std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >::basic_string(char const*, 
std::allocator<char> const&)+34)  
03-15 22:58:09.062  1600  1600 I DEBUG   :          738a7bf0  00000000    
03-15 22:58:09.062  1600  1600 I DEBUG   :          738a7bf4  738a7c38  
[stack:3867]  
03-15 22:58:09.063  1600  1600 I DEBUG   :          738a7bf8  df0027ad    
03-15 22:58:09.063  1600  1600 I DEBUG   :          738a7bfc  00000000    
03-15 22:58:09.064  1600  1600 I DEBUG   :     #00  738a7c00  00000000    
03-15 22:58:09.064  1600  1600 I DEBUG   :          ........  ........  
03-15 22:58:09.064  1600  1600 I DEBUG   :     #01  738a7c00  00000000    
03-15 22:58:09.065  1600  1600 I DEBUG   :          738a7c04  76d221f4    
03-15 22:58:09.065  1600  1600 I DEBUG   :          738a7c08  76e6e368    
03-15 22:58:09.065  1600  1600 I DEBUG   :          738a7c0c  76e4f249  
/system/lib/libgnustl_shared.so (std::string::_M_mutate(unsigned int, unsigned 
int, unsigned int)+60)  
03-15 22:58:09.066  1600  1600 I DEBUG   :          738a7c10  00000018    
03-15 22:58:09.066  1600  1600 I DEBUG   :          738a7c14  00000000    
03-15 22:58:09.067  1600  1600 I DEBUG   :          738a7c18  00000000    
03-15 22:58:09.067  1600  1600 I DEBUG   :          738a7c1c  76f3c091  
/system/lib/libmanager.so  
03-15 22:58:09.068  1600  1600 I DEBUG   :          738a7c20  76f44808  
/system/lib/libmanager.so  
03-15 22:58:09.068  1600  1600 I DEBUG   :          738a7c24  ffffffff    
03-15 22:58:09.069  1600  1600 I DEBUG   :          738a7c28  00000001    
03-15 22:58:09.069  1600  1600 I DEBUG   :          738a7c2c  76f44828  
/system/lib/libmanager.so  
03-15 22:58:09.070  1600  1600 I DEBUG   :          738a7c30  0000472f    
03-15 22:58:09.070  1600  1600 I DEBUG   :          738a7c34  76e6e301    
03-15 22:58:09.070  1600  1600 I DEBUG   :          738a7c38  772a0434  [heap]  
03-15 22:58:09.071  1600  1600 I DEBUG   :          738a7c3c  772a0410  [heap]

 

void TManagerBackendProcessor::process_Client(int32_t seqid, 
::apache::thrift::protocol::TProtocol* iprot, 
::apache::thrift::protocol::TProtocol* oprot, void* callContext)
{
  void* ctx = NULL;
  if (this->eventHandler_.get() != NULL) {
    ctx = this->eventHandler_->getContext("TManagerBackend.Client", 
callContext);
  }
  ::apache::thrift::TProcessorContextFreer freer(this->eventHandler_.get(), 
ctx, "TManagerBackend.Client");

  if (this->eventHandler_.get() != NULL) {
    this->eventHandler_->preRead(ctx, "TManagerBackend.Client");
  }

  TManagerBackend_Client_args args;
  args.read(iprot);
  iprot->readMessageEnd();
  uint32_t bytes = iprot->getTransport()->readEnd();

  if (this->eventHandler_.get() != NULL) {
    this->eventHandler_->postRead(ctx, "TManagerBackend.Client", bytes);
  }

  TManagerBackend_Client_result result;
  try {
    result.success = iface_->Client(args.clientId);
    result.__isset.success = true;
  } catch (const std::exception& e) {
    if (this->eventHandler_.get() != NULL) {
      this->eventHandler_->handlerError(ctx, "TManagerBackend.Client");
    }

    ::apache::thrift::TApplicationException x(e.what());
    oprot->writeMessageBegin("Client", ::apache::thrift::protocol::T_EXCEPTION, 
seqid);
    x.write(oprot);
    oprot->writeMessageEnd();
    oprot->getTransport()->writeEnd();
    oprot->getTransport()->flush();
    return;
  }

  if (this->eventHandler_.get() != NULL) {
    this->eventHandler_->preWrite(ctx, "TManagerBackend.Client");
  }

{color:#FF0000}  oprot->writeMessageBegin("Client", 
::apache::thrift::protocol::T_REPLY, seqid); //->line where crash observed 
(seems oprot is getting undesired value here, seems this is the first location 
of oprot getting used after its initialization in TthreadedServer, also first 
call made after TThreadedServer calls serve()){color}
  result.write(oprot);
  oprot->writeMessageEnd();
  bytes = oprot->getTransport()->writeEnd();
  oprot->getTransport()->flush();

  if (this->eventHandler_.get() != NULL) {
    this->eventHandler_->postWrite(ctx, "TManagerBackend.Client", bytes);
  }
}

 

we are using TThreadedServer with TBufferedTransportFactory.

Checked everything in our code, not sure the crash is because of thrift code or 
not. Kindly help me to understand the significance of TProtocol oprot and 
possible root cause of the crash happening...

 

 

 

 

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to