All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: linux-renesas-soc@vger.kernel.org
Cc: Kieran Bingham <kieran.bingham@ideasonboard.com>
Subject: [kms-test] [PATCH 4/7] kmstest: Fix exception handling in CRCReader constructor and destructor
Date: Sun, 31 Jul 2022 18:20:21 +0300	[thread overview]
Message-ID: <20220731152024.24090-5-laurent.pinchart@ideasonboard.com> (raw)
In-Reply-To: <20220731152024.24090-1-laurent.pinchart@ideasonboard.com>

If an exception occurs in the CRCReader constructor, the self.dir,
self.ctrl and self.data members may not be set. This causes another
exception to be thrown by the destructor when it tries to access those
members. Fix it by initializing all the members first, and only closing
the dir and ctrl file descriptors if they have been successfully opened.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 tests/kmstest.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/tests/kmstest.py b/tests/kmstest.py
index 177110ebd894..960c27f301ce 100755
--- a/tests/kmstest.py
+++ b/tests/kmstest.py
@@ -168,17 +168,21 @@ class CRCReader(object):
 
     def __init__(self, crtc):
         self.pipe = crtc.idx
+        self.ctrl = -1
+        self.dir = -1
+        self.data = -1
 
         # Hardcode the device minor to 0 as the KMSTest constructor opens the
         # default card object.
         self.dir = os.open(f'/sys/kernel/debug/dri/0/crtc-{self.pipe}/crc', 0)
         self.ctrl = os.open('control', os.O_WRONLY, dir_fd = self.dir)
-        self.data = -1
 
     def __del__(self):
         self.stop()
-        os.close(self.ctrl)
-        os.close(self.dir)
+        if self.ctrl != -1:
+            os.close(self.ctrl)
+        if self.dir != -1:
+            os.close(self.dir)
 
     def start(self, source):
         os.write(self.ctrl, source.encode('ascii'))
-- 
Regards,

Laurent Pinchart


  parent reply	other threads:[~2022-07-31 15:20 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-31 15:20 [kms-test] [PATCH 0/7] Miscellaneous fixes and improvements Laurent Pinchart
2022-07-31 15:20 ` [kms-test] [PATCH 1/7] tests: brxalloc: Fix test start log message Laurent Pinchart
2022-07-31 15:20 ` [kms-test] [PATCH 2/7] tests: modes: Fix access to RuntimeError message text Laurent Pinchart
2022-07-31 15:20 ` [kms-test] [PATCH 3/7] kmstest: Fix CRC directory name string Laurent Pinchart
2022-07-31 15:20 ` Laurent Pinchart [this message]
2022-07-31 15:20 ` [kms-test] [PATCH 5/7] tests: crc: Skip test if CRC support isn't available Laurent Pinchart
2022-07-31 15:20 ` [kms-test] [PATCH 6/7] tests: Only call execute() if the test is run directly Laurent Pinchart
2022-07-31 15:20 ` [kms-test] [PATCH 7/7] kmstest: Implement test runner when executed directly Laurent Pinchart
2022-07-31 18:52 ` [kms-test] [PATCH 8/7] tests: Don't skip formats and plane-position tests on unconnected connector Laurent Pinchart
2022-07-31 18:52 ` [kms-test] [PATCH 9/7] kmstest: Raise clear exception when property is not found Laurent Pinchart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220731152024.24090-5-laurent.pinchart@ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=linux-renesas-soc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.