Some integration tests seem to be getting exceptions that suggest the ArtemisMQ session has been closed down already. Looking at the client code it is clear two threads can call stop and interfere with each other. Therefore this fixes the running flag logic.

This commit is contained in:
Matthew Nesbit 2016-09-05 14:10:40 +01:00
parent ea3c63e023
commit eb8510e7cc

View File

@ -252,20 +252,25 @@ class ArtemisMessagingClient(directory: Path,
// Ignore it: this can happen if the server has gone away before we do. // Ignore it: this can happen if the server has gone away before we do.
} }
consumer = null consumer = null
running val prevRunning = running
running = false
prevRunning
} }
if (running && !executor.isOnThread) { if (running && !executor.isOnThread) {
// Wait for the main loop to notice the consumer has gone and finish up. // Wait for the main loop to notice the consumer has gone and finish up.
shutdownLatch.await() shutdownLatch.await()
} }
state.locked { // Only first caller to gets running true to protect against double stop, which seems to happen in some integration tests.
producer?.close() if (running) {
producer = null state.locked {
// Ensure any trailing messages are committed to the journal producer?.close()
session!!.commit() producer = null
// Closing the factory closes all the sessions it produced as well. // Ensure any trailing messages are committed to the journal
clientFactory!!.close() session!!.commit()
clientFactory = null // Closing the factory closes all the sessions it produced as well.
clientFactory!!.close()
clientFactory = null
}
} }
} }