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
