[
https://issues.apache.org/activemq/browse/AMQCPP-203?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=47055#action_47055
]
Timothy Bish commented on AMQCPP-203:
-------------------------------------
The BufferedInputStream class doesn't know anything about sockets or threads,
its just a dumb buffered reader, the real manager of the sockets and threads
code is in the IOTransport which first closes its input stream which at its
root is a wrapper around a SocketInputStream, so when the read thread calls
read on its input stream it will break because the socket is closed, the
transport then waits on the Read thread to die before finishing its shut-down
code.
Here's a snippet from the IOTransport's close method:
{noformat}
if( inputStream != NULL ){
inputStream->close();
inputStream = NULL;
}
// Wait for the thread to die.
if( thread != NULL ){
thread->join();
delete thread;
thread = NULL;
}
{noformat}
When the inputStream is closed what you were seeing was that the close method
deleted the buffer, but the read thread was still working its way through the
BufferedInputStream's bufferData method which would eventually hand off to the
socket input stream to read more data. When it tried to get access to the now
deleted buffer you'd see a seg fault.
At least that's my story.
> Segmentation Fault in Integration tests occurs occasionally.
> ------------------------------------------------------------
>
> Key: AMQCPP-203
> URL: https://issues.apache.org/activemq/browse/AMQCPP-203
> Project: ActiveMQ C++ Client
> Issue Type: Sub-task
> Components: Integration Tests
> Affects Versions: 2.2.1
> Environment: CentOS 5.2 / REHL / Fedora 9
> Reporter: Timothy Bish
> Assignee: Timothy Bish
> Fix For: 2.2.2
>
> Attachments: BufferedInputStream.cpp.patch, segfaults.tar.gz
>
>
> While running the integration tests in a long loop an occasional Segmentation
> fault has been seen.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.