[
https://issues.apache.org/activemq/browse/AMQCPP-122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_39311
]
Albert Strasheim commented on AMQCPP-122:
-----------------------------------------
I've found another crash that looks related to this issue. It only happens on
Windows and only with a Release build and only if you don't run the program
from within Visual Studio. I also have a dual core processor, which is probably
a contributing factor.
The code:
#include <activemq/core/ActiveMQConnectionFactory.h>
#include <cms/Connection.h>
using namespace activemq::core;
using namespace cms;
int main(int argc, char* argv[]) {
std::string brokerURI = "tcp://127.0.0.1:61613?wireFormat=openwire";
ActiveMQConnectionFactory connectionFactory(brokerURI);
cms::Connection* connection = 0;
try {
connection = connectionFactory.createConnection();
} catch (cms::CMSException& ex) {
std::cout << ex.what() << std::endl;
}
delete connection;
connection = 0;
return 0;
}
Notice that the wire format is Openwire but I'm connecting it to port 61613
where Stomp listens by default. On Linux and with a Debug build on Windows the
following is printed after about 10 seconds:
OpenWireFormatNegotiator::requestWire format negociation timeout: peer did not
send his wire format.
However, with a Windows Release build, the program crashes after this timeout.
The stack trace looks similar to the Stomp crash:
msvcr80.dll!fastcopy_I(void * dst=0x00359ba0, void * src=0x00003480,
int len=0) + 0x50 bytes C
msvcr80.dll!_VEC_memcpy(void * dst=0x00359ba0, void * src=0x000034f8,
int len=8) + 0x52 bytes C
msvcr80.dll!_VEC_memcpy(void * dst=0x00359b98, void * src=0x00003500,
int len=3513120) + 0xb4 bytes C
ntdll.dll!7c915233()
[Frames below may be incorrect and/or missing, no symbols loaded for
ntdll.dll]
vs2005-activemq-example.exe!activemq::io::BufferedInputStream::read(unsigned
char * targetBuffer=, unsigned int targetBufferSize=) Line 112 C++
vs2005-activemq-example.exe!activemq::io::DataInputStream::readByte()
Line 107 + 0x18 bytes C++
msvcr80.dll!operator new(unsigned int size=11337808) Line 59 + 0x8
bytes C++
msvcr80.dll!_VEC_memzero(void * dst=0x00000000, int val=13560, int
len=8) + 0x36 bytes C
msvcr80.dll!_VEC_memzero(void * dst=0x00000000, int val=3520656, int
len=2084710757) + 0x82 bytes C
msvcp80.dll!std::char_traits<char>::assign(char * _First=0x00ad0048,
unsigned int _Count=13568, char _Ch=0) Line 606 + 0x13 bytes C++
msvcp80.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char>
>::_Chassign(unsigned int _Off=11337808, unsigned int _Count=0, char _Ch='ø')
Line 2006 + 0x1f bytes C++
msvcr80.dll!_VEC_memzero(void * dst=0x00000000, int val=3520656, int
len=2084710757) + 0x82 bytes C
msvcp80.dll!std::char_traits<char>::assign(char * _First=0x00ad0048,
unsigned int _Count=13568, char _Ch=0) Line 606 + 0x13 bytes C++
msvcp80.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char>
>::_Chassign(unsigned int _Off=11337800, unsigned int _Count=0, char _Ch='')
Line 2006 + 0x1f bytes C++
msvcp80.dll!std::char_traits<char>::assign(char * _First=0x00ad0048,
unsigned int _Count=13568, char _Ch=0) Line 606 + 0x13 bytes C++
msvcp80.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char>
>::_Chassign(unsigned int _Off=0, unsigned int _Count=2084714695, char _Ch=0)
Line 2006 + 0x1f bytes C++
msvcp80.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char>
>::append(unsigned int _Count=13568, char _Ch='') Line 1008 C++
msvcp80.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char>
>::resize(unsigned int _Newsize=11337800, char _Ch=0) Line 1667 C++
vs2005-activemq-example.exe!activemq::io::DataInputStream::readUTF()
Line 270 C++
vs2005-activemq-example.exe!activemq::connector::openwire::marshal::BaseDataStreamMarshaller::looseUnmarshalString(activemq::io::DataInputStream
* dataIn=0x00acf698) Line 321 C++
vs2005-activemq-example.exe!activemq::connector::openwire::marshal::v2::ConnectionIdMarshaller::looseUnmarshal(activemq::connector::openwire::OpenWireFormat
* wireFormat=0x003598b8,
activemq::connector::openwire::commands::DataStructure *
dataStructure=0x00acf698, activemq::io::DataInputStream * dataIn=0x7ffddc00)
Line 106 + 0xe bytes C++
vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireFormat::doUnmarshal(activemq::io::DataInputStream
* dis=0x00000000) Line 249 C++
vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireFormat::unmarshal(activemq::io::DataInputStream
* dis=0x003598b8) Line 185 + 0x9 bytes C++
vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireCommandReader::readCommand()
Line 76 C++
> vs2005-activemq-example.exe!activemq::transport::IOTransport::run()
> Line 169 C++
In the main thread, it is waiting on the IOTransport to close:
vs2005-activemq-example.exe!activemq::concurrent::Thread::join() Line
108 C++
ntdll.dll!7c911970()
ntdll.dll!7c911902()
> vs2005-activemq-example.exe!activemq::transport::IOTransport::close()
> Line 143 C++
vs2005-activemq-example.exe!activemq::transport::filters::TcpTransport::close()
Line 148 C++
vs2005-activemq-example.exe!activemq::transport::filters::ResponseCorrelator::close()
Line 240 C++
vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireFormatNegotiator::~OpenWireFormatNegotiator()
Line 49 + 0x1a bytes C++
vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireFormatNegotiator::`scalar
deleting destructor'() + 0x8 bytes C++
vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::~OpenWireConnector()
Line 119 C++
vs2005-activemq-example.exe!activemq::connector::openwire::OpenWireConnector::`scalar
deleting destructor'() + 0x8 bytes C++
vs2005-activemq-example.exe!activemq::core::ActiveMQConnectionFactory::createConnection(const
std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
url="tcp://127.0.0.1:61613?wireFormat=openwire", const
std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
username={...}, const
std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
password={...}, const
std::basic_string<char,std::char_traits<char>,std::allocator<char> > &
clientId="b9fcd2b6-9767-4415-905e-69f3e96448ec") Line 176 C++
> 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: Timothy Bish
> 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.