Skip to content

Commit aaedbc0

Browse files
committed
scripts: check_init_priorities: Fix file leak
The elf file needs to be closed after done being used, otherwise sys module will generate resource leak warnings. Signed-off-by: Declan Snyder <[email protected]>
1 parent 337d023 commit aaedbc0

File tree

2 files changed

+29
-28
lines changed

2 files changed

+29
-28
lines changed

scripts/build/check_init_priorities.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ class variables in the {"level name": ["call", ...]} format.
9898
Attributes:
9999
file_path: path of the file to be loaded.
100100
"""
101-
def __init__(self, file_path):
101+
def __init__(self, file_path, elf_file):
102102
self.file_path = file_path
103-
self._elf = ELFFile(open(file_path, "rb"))
103+
self._elf = ELFFile(elf_file)
104104
self._load_objects()
105105
self._load_level_addr()
106106
self._process_initlevels()
@@ -226,7 +226,7 @@ class Validator():
226226
edt_pickle: name of the EDT pickle file
227227
log: a logging.Logger object
228228
"""
229-
def __init__(self, elf_file_path, edt_pickle, log):
229+
def __init__(self, elf_file_path, edt_pickle, log, elf_file):
230230
self.log = log
231231

232232
edt_pickle_path = pathlib.Path(
@@ -237,7 +237,7 @@ def __init__(self, elf_file_path, edt_pickle, log):
237237

238238
self._ord2node = edt.dep_ord2node
239239

240-
self._obj = ZephyrInitLevels(elf_file_path)
240+
self._obj = ZephyrInitLevels(elf_file_path, elf_file)
241241

242242
self.errors = 0
243243

@@ -344,17 +344,18 @@ def main(argv=None):
344344

345345
log.info(f"check_init_priorities: {args.elf_file}")
346346

347-
validator = Validator(args.elf_file, args.edt_pickle, log)
348-
if args.initlevels:
349-
validator.print_initlevels()
350-
else:
351-
validator.check_edt()
347+
with open(args.elf_file, "rb") as elf_file:
348+
validator = Validator(args.elf_file, args.edt_pickle, log, elf_file)
349+
if args.initlevels:
350+
validator.print_initlevels()
351+
else:
352+
validator.check_edt()
352353

353-
if args.always_succeed:
354-
return 0
354+
if args.always_succeed:
355+
return 0
355356

356-
if validator.errors:
357-
return 1
357+
if validator.errors:
358+
return 1
358359

359360
return 0
360361

scripts/build/check_init_priorities_test.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def test_load_objects(self, mock_zilinit):
8282

8383
sts.iter_symbols.return_value = [s0, s1, s2]
8484

85-
obj = check_init_priorities.ZephyrInitLevels("")
85+
obj = check_init_priorities.ZephyrInitLevels("", None)
8686
obj._elf = mock_elf
8787
obj._load_objects()
8888

@@ -126,7 +126,7 @@ def test_load_level_addr(self, mock_zilinit):
126126

127127
sts.iter_symbols.return_value = [s0, s1, s2, s3, s4, s5, s6]
128128

129-
obj = check_init_priorities.ZephyrInitLevels("")
129+
obj = check_init_priorities.ZephyrInitLevels("", None)
130130
obj._elf = mock_elf
131131
obj._load_level_addr()
132132

@@ -142,15 +142,15 @@ def test_load_level_addr(self, mock_zilinit):
142142

143143
@mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
144144
def test_device_ord_from_name(self, mock_zilinit):
145-
obj = check_init_priorities.ZephyrInitLevels("")
145+
obj = check_init_priorities.ZephyrInitLevels("", None)
146146

147147
self.assertEqual(obj._device_ord_from_name(None), None)
148148
self.assertEqual(obj._device_ord_from_name("hey, hi!"), None)
149149
self.assertEqual(obj._device_ord_from_name("__device_dts_ord_123"), 123)
150150

151151
@mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
152152
def test_object_name(self, mock_zilinit):
153-
obj = check_init_priorities.ZephyrInitLevels("")
153+
obj = check_init_priorities.ZephyrInitLevels("", None)
154154
obj._objects = {0x123: ("name", 4)}
155155

156156
self.assertEqual(obj._object_name(0), "NULL")
@@ -159,7 +159,7 @@ def test_object_name(self, mock_zilinit):
159159

160160
@mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
161161
def test_initlevel_pointer_32(self, mock_zilinit):
162-
obj = check_init_priorities.ZephyrInitLevels("")
162+
obj = check_init_priorities.ZephyrInitLevels("", None)
163163
obj._elf = mock.Mock()
164164
obj._elf.elfclass = 32
165165
mock_section = mock.Mock()
@@ -176,7 +176,7 @@ def test_initlevel_pointer_32(self, mock_zilinit):
176176

177177
@mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
178178
def test_initlevel_pointer_64(self, mock_zilinit):
179-
obj = check_init_priorities.ZephyrInitLevels("")
179+
obj = check_init_priorities.ZephyrInitLevels("", None)
180180
obj._elf = mock.Mock()
181181
obj._elf.elfclass = 64
182182
mock_section = mock.Mock()
@@ -195,7 +195,7 @@ def test_initlevel_pointer_64(self, mock_zilinit):
195195
@mock.patch("check_init_priorities.ZephyrInitLevels._initlevel_pointer")
196196
@mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
197197
def test_process_initlevels(self, mock_zilinit, mock_ip, mock_on):
198-
obj = check_init_priorities.ZephyrInitLevels("")
198+
obj = check_init_priorities.ZephyrInitLevels("", None)
199199
obj._init_level_addr = {
200200
"EARLY": 0x00,
201201
"PRE_KERNEL_1": 0x00,
@@ -250,15 +250,15 @@ def test_initialize(self, mock_pl, mock_zil):
250250
mock_zil.return_value = mock_obj
251251

252252
with mock.patch("builtins.open", mock.mock_open()) as mock_open:
253-
validator = check_init_priorities.Validator("path", "pickle", mock_log)
253+
validator = check_init_priorities.Validator("path", "pickle", mock_log, None)
254254

255255
self.assertEqual(validator._obj, mock_obj)
256-
mock_zil.assert_called_once_with("path")
256+
mock_zil.assert_called_once_with("path", None)
257257
mock_open.assert_called_once_with(pathlib.Path("pickle"), "rb")
258258

259259
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
260260
def test_check_dep_same_node(self, mock_vinit):
261-
validator = check_init_priorities.Validator("", "", None)
261+
validator = check_init_priorities.Validator("", "", None, None)
262262
validator.log = mock.Mock()
263263

264264
validator._check_dep(123, 123)
@@ -269,7 +269,7 @@ def test_check_dep_same_node(self, mock_vinit):
269269

270270
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
271271
def test_check_dep_no_prio(self, mock_vinit):
272-
validator = check_init_priorities.Validator("", "", None)
272+
validator = check_init_priorities.Validator("", "", None, None)
273273
validator.log = mock.Mock()
274274
validator._obj = mock.Mock()
275275

@@ -289,7 +289,7 @@ def test_check_dep_no_prio(self, mock_vinit):
289289

290290
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
291291
def test_check(self, mock_vinit):
292-
validator = check_init_priorities.Validator("", "", None)
292+
validator = check_init_priorities.Validator("", "", None, None)
293293
validator.log = mock.Mock()
294294
validator._obj = mock.Mock()
295295
validator.errors = 0
@@ -313,7 +313,7 @@ def test_check(self, mock_vinit):
313313

314314
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
315315
def test_check_same_prio_assert(self, mock_vinit):
316-
validator = check_init_priorities.Validator("", "", None)
316+
validator = check_init_priorities.Validator("", "", None, None)
317317
validator.log = mock.Mock()
318318
validator._obj = mock.Mock()
319319
validator.errors = 0
@@ -331,7 +331,7 @@ def test_check_same_prio_assert(self, mock_vinit):
331331

332332
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
333333
def test_check_ignored(self, mock_vinit):
334-
validator = check_init_priorities.Validator("", "", None)
334+
validator = check_init_priorities.Validator("", "", None, None)
335335
validator.log = mock.Mock()
336336
validator._obj = mock.Mock()
337337
validator.errors = 0
@@ -374,7 +374,7 @@ def test_check_edt(self, mock_vinit, mock_cd):
374374
dev2 = mock.Mock()
375375
dev2.depends_on = [d2]
376376

377-
validator = check_init_priorities.Validator("", "", None)
377+
validator = check_init_priorities.Validator("", "", None, None)
378378
validator._ord2node = {1: dev0, 2: dev1, 3: dev2}
379379
validator._obj = mock.Mock()
380380
validator._obj.devices = {1: 10, 2: 10, 3: 20}

0 commit comments

Comments
 (0)