possible race on lease_update_backlog_
I am not sure if this can happen when calling HAService::communicationRecoveryHandler (main thread) which calls lease_update_backlog_.clear() and HAService::asyncSendLeaseUpdates (processing threads) which calls lease_update_backlog_.push(...).
Main thread also calls HAService::asyncSendLeaseUpdatesFromBacklog which does lease_update_backlog_.pop() which can race with processing threads but can only end up postponing the exit from HAService::asyncSendLeaseUpdatesFromBacklog (maybe forever)?
The race might not be possible because of different transition states but it is not obvious from the code. A state diagram might be useful.
To note that operations on lease_update_backlog_ are thread safe.