On 01/04/2012 12:03 PM, wolfwolfswinkel wrote:
The patch fixes my first issue (the broker not sending heartbeats).

Unfortunately the second issue persists. Now I trigger a heartbeat timeout
in the client by disconnecting a network cable. The client notices the
missing heartbeat (shows the "debug Traffic timeout" message), but then does
not do any reconnect attempts. When the Sender is up to capacity, it seems
to block indefinitely in a sync() call. Stack trace below.

That looks like a problem on the client side. When the heartbeat fires it asks the AsynchIO part of the library to callback on an IO thread (AsynchIO::requestCallback()). The callback function is TCPConnector::eof() which just calls TCPConnector::close() which then calls AsynchIO::queueWriteClose(). That should result in the socket being closed and the application being notified of the closed socket.

As far as I can see, the only part that differs between windows and linux here is the AsyncIO implementation. My guess is that either the callback mechanism on AsynchIO isn't working as expected on windows, or somehow the close that it triggers isn't actually closing the socket and notifying the application as expected.

That will require a little more debugging however.

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to