summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-07-31 17:56:24 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-07-31 18:15:43 +0300
commit96082f398145757ef092ef19af53f12666b69552 (patch)
tree3e72630155a3d3a3394289a607eaecf658fc309f
parentb4da7b2eacdfa8e4a88cbe190d79a0cb11f82b92 (diff)
kmstest: Fix exception handling in CRCReader constructor and destructor
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>
-rwxr-xr-xtests/kmstest.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/tests/kmstest.py b/tests/kmstest.py
index 177110e..960c27f 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'))