Исправил один очень жестокий косяк: раньше было if (message.t < current_t) rollback() ELSE push_into_queue(). Вопрос, почему ELSE???? Сообщение пусть и косячное, нужно положить в очередь после процедуры отката