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.
}
consumer = null
running
val prevRunning = running
running = false
prevRunning
}
if (running && !executor.isOnThread) {
// Wait for the main loop to notice the consumer has gone and finish up.
shutdownLatch.await()
}
state.locked {
producer?.close()
producer = null
// Ensure any trailing messages are committed to the journal
session!!.commit()
// Closing the factory closes all the sessions it produced as well.
clientFactory!!.close()
clientFactory = null
// Only first caller to gets running true to protect against double stop, which seems to happen in some integration tests.
if (running) {
state.locked {
producer?.close()
producer = null
// Ensure any trailing messages are committed to the journal
session!!.commit()
// Closing the factory closes all the sessions it produced as well.
clientFactory!!.close()
clientFactory = null
}
}
}