try..finally for once()

The listener should be removed even if the listener has thrown an
exception.