cleanup() already checks self.extracted