En realidad, veo un lugar...
finally {
if (removeGroup) {
this.remove(group);
}
lock.unlock();
}
...si el almacén de mensajes arroja una excepción durante la eliminación, omitiríamos el desbloqueo. ¿Ves algo en el registro?