Skip to content

Commit b45bc03

Browse files
decsnycfriedt
authored andcommitted
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 0d6b0ce commit b45bc03

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
@@ -101,9 +101,9 @@ class variables in the {"level name": ["call", ...]} format.
101101
Attributes:
102102
file_path: path of the file to be loaded.
103103
"""
104-
def __init__(self, file_path):
104+
def __init__(self, file_path, elf_file):
105105
self.file_path = file_path
106-
self._elf = ELFFile(open(file_path, "rb"))
106+
self._elf = ELFFile(elf_file)
107107
self._load_objects()
108108
self._load_level_addr()
109109
self._process_initlevels()
@@ -237,7 +237,7 @@ class Validator():
237237
edt_pickle: name of the EDT pickle file
238238
log: a logging.Logger object
239239
"""
240-
def __init__(self, elf_file_path, edt_pickle, log):
240+
def __init__(self, elf_file_path, edt_pickle, log, elf_file):
241241
self.log = log
242242

243243
edt_pickle_path = pathlib.Path(
@@ -248,7 +248,7 @@ def __init__(self, elf_file_path, edt_pickle, log):
248248

249249
self._ord2node = edt.dep_ord2node
250250

251-
self._obj = ZephyrInitLevels(elf_file_path)
251+
self._obj = ZephyrInitLevels(elf_file_path, elf_file)
252252

253253
self.errors = 0
254254

@@ -355,17 +355,18 @@ def main(argv=None):
355355

356356
log.info(f"check_init_priorities: {args.elf_file}")
357357

358-
validator = Validator(args.elf_file, args.edt_pickle, log)
359-
if args.initlevels:
360-
validator.print_initlevels()
361-
else:
362-
validator.check_edt()
358+
with open(args.elf_file, "rb") as elf_file:
359+
validator = Validator(args.elf_file, args.edt_pickle, log, elf_file)
360+
if args.initlevels:
361+
validator.print_initlevels()
362+
else:
363+
validator.check_edt()
363364

364-
if args.always_succeed:
365-
return 0
365+
if args.always_succeed:
366+
return 0
366367

367-
if validator.errors:
368-
return 1
368+
if validator.errors:
369+
return 1
369370

370371
return 0
371372

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,
@@ -257,15 +257,15 @@ def test_initialize(self, mock_pl, mock_zil):
257257
mock_zil.return_value = mock_obj
258258

259259
with mock.patch("builtins.open", mock.mock_open()) as mock_open:
260-
validator = check_init_priorities.Validator("path", "pickle", mock_log)
260+
validator = check_init_priorities.Validator("path", "pickle", mock_log, None)
261261

262262
self.assertEqual(validator._obj, mock_obj)
263-
mock_zil.assert_called_once_with("path")
263+
mock_zil.assert_called_once_with("path", None)
264264
mock_open.assert_called_once_with(pathlib.Path("pickle"), "rb")
265265

266266
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
267267
def test_check_dep_same_node(self, mock_vinit):
268-
validator = check_init_priorities.Validator("", "", None)
268+
validator = check_init_priorities.Validator("", "", None, None)
269269
validator.log = mock.Mock()
270270

271271
validator._check_dep(123, 123)
@@ -276,7 +276,7 @@ def test_check_dep_same_node(self, mock_vinit):
276276

277277
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
278278
def test_check_dep_no_prio(self, mock_vinit):
279-
validator = check_init_priorities.Validator("", "", None)
279+
validator = check_init_priorities.Validator("", "", None, None)
280280
validator.log = mock.Mock()
281281
validator._obj = mock.Mock()
282282

@@ -296,7 +296,7 @@ def test_check_dep_no_prio(self, mock_vinit):
296296

297297
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
298298
def test_check(self, mock_vinit):
299-
validator = check_init_priorities.Validator("", "", None)
299+
validator = check_init_priorities.Validator("", "", None, None)
300300
validator.log = mock.Mock()
301301
validator._obj = mock.Mock()
302302
validator.errors = 0
@@ -320,7 +320,7 @@ def test_check(self, mock_vinit):
320320

321321
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
322322
def test_check_same_prio_assert(self, mock_vinit):
323-
validator = check_init_priorities.Validator("", "", None)
323+
validator = check_init_priorities.Validator("", "", None, None)
324324
validator.log = mock.Mock()
325325
validator._obj = mock.Mock()
326326
validator.errors = 0
@@ -338,7 +338,7 @@ def test_check_same_prio_assert(self, mock_vinit):
338338

339339
@mock.patch("check_init_priorities.Validator.__init__", return_value=None)
340340
def test_check_ignored(self, mock_vinit):
341-
validator = check_init_priorities.Validator("", "", None)
341+
validator = check_init_priorities.Validator("", "", None, None)
342342
validator.log = mock.Mock()
343343
validator._obj = mock.Mock()
344344
validator.errors = 0
@@ -381,7 +381,7 @@ def test_check_edt(self, mock_vinit, mock_cd):
381381
dev2 = mock.Mock()
382382
dev2.depends_on = [d2]
383383

384-
validator = check_init_priorities.Validator("", "", None)
384+
validator = check_init_priorities.Validator("", "", None, None)
385385
validator._ord2node = {1: dev0, 2: dev1, 3: dev2}
386386
validator._obj = mock.Mock()
387387
validator._obj.devices = {1: 10, 2: 10, 3: 20}

0 commit comments

Comments
 (0)