[ https://issues.apache.org/activemq/browse/AMQCPP-122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_39215 ]
Albert Strasheim commented on AMQCPP-122: ----------------------------------------- I don't think this is specific to the DLL build. I just happened to be doing a DLL build. I'll check that it also happens with the static library tonight. Also, this usage scenario is quite realistic. I am seeing this crash about 1 in every 5 times I run the pyactivemq unit tests, which only does "normal" things with AMQCPP. The code I posted might be slightly unrealistic, but it was the quickest way I could duplicate the crash outside of pyactivemq. > Crash on Windows when rapidly creating and destroying connections > ----------------------------------------------------------------- > > Key: AMQCPP-122 > URL: https://issues.apache.org/activemq/browse/AMQCPP-122 > Project: ActiveMQ C++ Client > Issue Type: Bug > Affects Versions: 2.1 > Reporter: Albert Strasheim > Assignee: Nathan Mittler > Fix For: 2.1 > > > Me again. :) > The following program crashes within a few seconds on my Windows XP machine. > This machine has a Core 2 Duo processor (i. e. 2 cores). > On my Pentium 4 + Hyperthreading Linux machine is only dies after about a > minute with: > terminate called after throwing an instance of > 'activemq::exceptions::ActiveMQException' > what(): Cannot assign requested address > Aborted > However, this is to be expected, since the program causes thousands of > sockets to be created. This doesn't seem to be the reason it crashes on > Windows though. > The code: > {code:none} > #include <activemq/core/ActiveMQConnectionFactory.h> > #include <cms/Connection.h> > #include <cms/Session.h> > #include <cms/MessageProducer.h> > #include <cms/DeliveryMode.h> > int main(int argc, char* argv[]) { > activemq::core::ActiveMQConnectionFactory > connectionFactory("tcp://localhost:61613?wireFormat=stomp"); > while(true) > { > cms::Connection* connection = connectionFactory.createConnection(); > cms::Session* session = > connection->createSession(cms::Session::AUTO_ACKNOWLEDGE); > cms::Topic* topic = session->createTopic("topic"); > cms::MessageProducer* producer = session->createProducer(topic); > delete producer; > delete topic; > delete session; > delete connection; > } > return 0; > } > {code} > The stack trace when it crashes: > > activemq-cppd.dll!activemq::io::BufferedInputStream::read() Line 79 + > > 0x12 bytes C++ > > activemq-cppd.dll!activemq::connector::stomp::StompCommandReader::readStompHeaderLine() > Line 194 + 0x19 bytes C++ > > activemq-cppd.dll!activemq::connector::stomp::StompCommandReader::readStompCommandHeader(activemq::connector::stomp::StompFrame > & frame={...}) Line 101 C++ > > activemq-cppd.dll!activemq::connector::stomp::StompCommandReader::readCommand() > Line 59 C++ > activemq-cppd.dll!activemq::transport::IOTransport::run() Line 166 + > 0x19 bytes C++ > activemq-cppd.dll!activemq::concurrent::Thread::runCallback(void * > param=0x003ad328) Line 152 + 0x13 bytes C++ > msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C > msvcr80d.dll!_threadstartex(void * ptd=0x003adac0) Line 331 C > kernel32.dll!7c80b683() > [Frames below may be incorrect and/or missing, no symbols loaded for > kernel32.dll] > The line in BufferedInputStream::read is: > char returnValue = buffer[head++]; > There is a local variable called bufferSize with a value of 1024. However, > the value of head is usually much larger than bufferSize (like more than > 10000). -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.