Classification: UNCLASSIFIED
Caveats: FOUO

I've discovered that the problem is my use of the -malign-double switch with 
gcc... I have been doing that because a library on which I'm dependent (and 
which is closed source and proprietary) requires this switch. Not sure how I'll 
work around this, but this isn't an Apache Thrift issue. Thanks anyway!

-----Original Message-----
From: Knick, Scott E CTR USARMY RCERT-EUR (US) 
Sent: Tuesday, November 13, 2012 11:10 AM
To: '[email protected]'
Subject: RE: TNonblockingServer: overload condition begun (UNCLASSIFIED)

Classification: UNCLASSIFIED
Caveats: FOUO

I'm really baffled by this. No one has any ideas? Valgrind is showing an issue 
with something not being allocated:

==23321== Memcheck, a memory error detector ==23321== Copyright (C) 2002-2011, 
and GNU GPL'd, by Julian Seward et al.
==23321== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==23321== Command: ./apeface --port 61234 --no-daemon ==23321==
Thrift: Tue Nov 13 11:05:42 2012 TNonblockingServer: Serving on port 61234, 1 
io threads.
Thrift: Tue Nov 13 11:05:42 2012 TNonblockingServer: using libevent 
2.0.16-stable method epoll
Thrift: Tue Nov 13 11:05:42 2012 TNonblocking: IO thread #0 registered for 
listen.
Thrift: Tue Nov 13 11:05:42 2012 TNonblocking: IO thread #0 registered for 
notify.
Thrift: Tue Nov 13 11:05:42 2012 TNonblockingServer: IO thread #0 entering 
loop...
Thrift: Tue Nov 13 11:05:46 2012 TNonblockingServer: overload condition begun.
==23321== Use of uninitialised value of size 4
==23321==    at 0x44BB233: 
apache::thrift::server::TNonblockingServer::TConnection::init(int, 
apache::thrift::server::TNonblockingIOThread*, sockaddr const*, unsigned int) 
(TNonblockingServer.cpp:1539)
==23321==    by 0x5604B3F: ???
==23321==
==23321== Invalid read of size 4
==23321==    at 0x44BB233: 
apache::thrift::server::TNonblockingServer::TConnection::init(int, 
apache::thrift::server::TNonblockingIOThread*, sockaddr const*, unsigned int) 
(TNonblockingServer.cpp:1539)
==23321==    by 0x5604B3F: ???
==23321==  Address 0x10 is not stack'd, malloc'd or (recently) free'd ==23321== 
==23321== ==23321== Process terminating with default action of signal 11 
(SIGSEGV) ==23321==  Access not within mapped region at address 0x10
==23321==    at 0x44BB233: 
apache::thrift::server::TNonblockingServer::TConnection::init(int, 
apache::thrift::server::TNonblockingIOThread*, sockaddr const*, unsigned int) 
(TNonblockingServer.cpp:1539)
==23321==    by 0x5604B3F: ???
==23321==  If you believe this happened as a result of a stack ==23321==  
overflow in your program's main thread (unlikely but ==23321==  possible), you 
can try to increase the size of the ==23321==  main thread stack using the 
--main-stacksize= flag.
==23321==  The main thread stack size used in this run was 8388608.
==23321==
==23321== HEAP SUMMARY:
==23321==     in use at exit: 10,898 bytes in 219 blocks
==23321==   total heap usage: 345 allocs, 126 frees, 15,196 bytes allocated
==23321==
==23321== LEAK SUMMARY:
==23321==    definitely lost: 0 bytes in 0 blocks
==23321==    indirectly lost: 0 bytes in 0 blocks
==23321==      possibly lost: 3,086 bytes in 51 blocks
==23321==    still reachable: 7,812 bytes in 168 blocks
==23321==         suppressed: 0 bytes in 0 blocks
==23321== Rerun with --leak-check=full to see details of leaked memory 
==23321== ==23321== For counts of detected and suppressed errors, rerun with: 
-v ==23321== Use --track-origins=yes to see where uninitialised values come 
from ==23321== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0) 
Killed

-----Original Message-----
From: Knick, Scott E CTR USARMY RCERT-EUR (US)
Sent: Friday, November 09, 2012 3:44 PM
To: '[email protected]'
Subject: TNonblockingServer: overload condition begun (UNCLASSIFIED)

Classification: UNCLASSIFIED
Caveats: FOUO

Sorry if this has already been asked, but I couldn't find an option for 
searching the mailing list archives.

I am using a TNonblockingServer instance in my C++ program. On a different 
64-bit Linux system, this worked fine and all of my unit testing passed. 
However, a requirement has forced me to make a 32-bit build of the program, so 
I did so on a 32-bit Linux system for simplicity's sake. Everything builds 
well, the usual output is given from the program, but then when I run my unit 
test, it blows up with an error I don't follow and I get a segmentation fault 
(the last line is when this occurs):

Thrift: Fri Nov  9 15:40:11 2012 TNonblockingServer: Serving on port 61234, 1 
io threads.
Thrift: Fri Nov  9 15:40:11 2012 TNonblockingServer: using libevent 
2.0.16-stable method epoll
Thrift: Fri Nov  9 15:40:11 2012 TNonblocking: IO thread #0 registered for 
listen.
Thrift: Fri Nov  9 15:40:11 2012 TNonblocking: IO thread #0 registered for 
notify.
Thrift: Fri Nov  9 15:40:11 2012 TNonblockingServer: IO thread #0 entering 
loop... 
Thrift: Fri Nov  9 15:40:37 2012 TNonblockingServer: overload condition begun.

The stack trace shows:

Thread [1] 2814 [core: 0] (Suspended : Signal : SIGSEGV:Segmentation fault)     
        apache::thrift::server::TNonblockingServer::TConnection::init() at 
0x5a2233     
        apache::thrift::server::TNonblockingServer::createConnection() at 
0x5a341f      
        apache::thrift::server::TNonblockingServer::handleEvent() at 0x5a7770   
        apache::thrift::server::TNonblockingIOThread::listenHandler() at 
0x5aa91c       
        event_base_loop() at 0x5c2ce9   
        apache::thrift::server::TNonblockingIOThread::run() at 0x5a4f18 
        apache::thrift::server::TNonblockingServer::serve() at 0x5a6022 
        apache::thrift::server::TServer::run() at TServer.h:112 0x8065e06       
        main() at main.cpp:171 0x8063e80        

What is going on? My code that uses the TNonblockingServer is simple enough:

    boost::shared_ptr<Remedy> handler(new Remedy());
    boost::shared_ptr<thrift::TProcessor> processor(new 
Apeface::RemedyProcessor(handler));
    boost::shared_ptr<thrift::protocol::TProtocolFactory> protocolFactory(new 
thrift::protocol::TBinaryProtocolFactory());
    
    boost::shared_ptr<thrift::concurrency::ThreadManager> threadManager = 
thrift::concurrency::ThreadManager::newSimpleThreadManager();
    boost::shared_ptr<thrift::concurrency::PosixThreadFactory> threadFactory = 
boost::shared_ptr<thrift::concurrency::PosixThreadFactory>(new 
thrift::concurrency::PosixThreadFactory());
    threadManager->threadFactory(threadFactory);
    threadManager->start();
    
    thrift::server::TNonblockingServer server(processor,
                                              protocolFactory,
                                              portNum,
                                              threadManager);
    serverPtr = &server;
    
    server.run();

--
Scott Knick


Classification: UNCLASSIFIED
Caveats: FOUO



Classification: UNCLASSIFIED
Caveats: FOUO



Classification: UNCLASSIFIED
Caveats: FOUO


Reply via email to