From patchwork Thu Jun 23 07:00:17 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: qzhou@redhat.com X-Patchwork-Id: 908352 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p5N70nYV008471 for ; Thu, 23 Jun 2011 07:00:50 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755352Ab1FWHAh (ORCPT ); Thu, 23 Jun 2011 03:00:37 -0400 Received: from mx1.redhat.com ([209.132.183.28]:32175 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755296Ab1FWHAg (ORCPT ); Thu, 23 Jun 2011 03:00:36 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p5N70ZxD016761 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 Jun 2011 03:00:35 -0400 Received: from qzhou-TP.nay.redhat.com ([10.66.65.207]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id p5N70WU7001057; Thu, 23 Jun 2011 03:00:33 -0400 From: Qingtang Zhou To: autotest@test.kernel.org Cc: kvm@vger.kernel.org, Qingtang Zhou Subject: [PATCH v2] KVM Test: kvm_monitor.py: Close socket explicitly if exception raised in __init__ Date: Thu, 23 Jun 2011 15:00:17 +0800 Message-Id: <1308812417-566-1-git-send-email-qzhou@redhat.com> In-Reply-To: <1306294009-1672-1-git-send-email-qzhou@redhat.com> References: <1306294009-1672-1-git-send-email-qzhou@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Thu, 23 Jun 2011 07:00:50 +0000 (UTC) monitor socket will be initiated at the beginning of '*Monitor.__init__', if exception occur in this function, socket will not be closed correctly. In this case, socket should be closed explicitly. Signed-off-by: Qingtang Zhou --- client/virt/kvm_monitor.py | 18 +++++++++++++----- 1 files changed, 13 insertions(+), 5 deletions(-) diff --git a/client/virt/kvm_monitor.py b/client/virt/kvm_monitor.py index aff716a..3980da8 100644 --- a/client/virt/kvm_monitor.py +++ b/client/virt/kvm_monitor.py @@ -82,11 +82,7 @@ class Monitor: def __del__(self): # Automatically close the connection when the instance is garbage # collected - try: - self._socket.shutdown(socket.SHUT_RDWR) - except socket.error: - pass - self._socket.close() + self._close_sock() # The following two functions are defined to make sure the state is set @@ -106,6 +102,13 @@ class Monitor: return self.name, self.filename, True + def _close_sock(self): + try: + self._socket.shutdown(socket.SHUT_RDWR) + except socket.error: + pass + self._socket.close() + def _acquire_lock(self, timeout=20): end_time = time.time() + timeout while time.time() < end_time: @@ -171,6 +174,7 @@ class HumanMonitor(Monitor): # Find the initial (qemu) prompt s, o = self._read_up_to_qemu_prompt(20) if not s: + self._close_sock() raise MonitorProtocolError("Could not find (qemu) prompt " "after connecting to monitor. " "Output so far: %r" % o) @@ -179,6 +183,7 @@ class HumanMonitor(Monitor): self._help_str = self.cmd("help", debug=False) except MonitorError, e: + self._close_sock() if suppress_exceptions: logging.warn(e) else: @@ -427,6 +432,7 @@ class QMPMonitor(Monitor): try: json except NameError: + self._close_sock() raise MonitorNotSupportedError("QMP requires the json module " "(Python 2.6 and up)") @@ -441,12 +447,14 @@ class QMPMonitor(Monitor): break time.sleep(0.1) else: + self._close_sock() raise MonitorProtocolError("No QMP greeting message received") # Issue qmp_capabilities self.cmd("qmp_capabilities") except MonitorError, e: + self._close_sock() if suppress_exceptions: logging.warn(e) else: