[CRIU] [PATCHv3 8/8] zdtm: Explicitly close opened files
Andrei Vagin
avagin at virtuozzo.com
Mon Sep 10 22:12:41 MSK 2018
Could you write a more detailed commig message? It should describe why
do we need these changes.
Thanks,
Andrei
On Tue, Sep 04, 2018 at 10:26:57PM +0100, Radostin Stoyanov wrote:
> Signed-off-by: Radostin Stoyanov <rstoyanov1 at gmail.com>
> ---
> test/zdtm.py | 100 ++++++++++++++++++++++++++++++---------------------
> 1 file changed, 59 insertions(+), 41 deletions(-)
>
> diff --git a/test/zdtm.py b/test/zdtm.py
> index 6a89ee25..eb9fe6a0 100755
> --- a/test/zdtm.py
> +++ b/test/zdtm.py
> @@ -108,13 +108,10 @@ def add_to_output(path):
> if not report_dir:
> return
>
> - fdi = open(path, "r")
> - fdo = open(os.path.join(report_dir, "output"), "a")
> - while True:
> - buf = fdi.read(1 << 20)
> - if not buf:
> - break
> - fdo.write(buf)
> + output_path = os.path.join(report_dir, "output")
> + with open(path, "r") as fdi, open(output_path, "a") as fdo:
> + for line in fdi:
> + fdo.write(line)
>
>
> prev_crash_reports = set(glob.glob("/tmp/zdtm-core-*.txt"))
> @@ -131,7 +128,8 @@ def check_core_files():
> for i in reports:
> add_to_report(i, os.path.basename(i))
> print_sep(i)
> - print(open(i).read())
> + with open(i, "r") as report:
> + print(report.read())
> print_sep(i)
>
> return True
> @@ -318,7 +316,8 @@ def tail(path):
>
>
> def rpidfile(path):
> - return open(path).readline().strip()
> + with open(path) as fd:
> + return fd.readline().strip()
>
>
> def wait_pid_die(pid, who, tmo = 30):
> @@ -502,7 +501,8 @@ class zdtm_test:
> if 'PASS' not in list(map(lambda s: s.strip(), res.split())):
> if os.access(self.__name + '.out.inprogress', os.F_OK):
> print_sep(self.__name + '.out.inprogress')
> - print(open(self.__name + '.out.inprogress').read())
> + with open(self.__name + '.out.inprogress') as fd:
> + print(fd.read())
> print_sep(self.__name + '.out.inprogress')
> raise test_fail_exc("result check")
>
> @@ -547,7 +547,8 @@ class zdtm_test:
> def print_output(self):
> if os.access(self.__name + '.out', os.R_OK):
> print("Test output: " + "=" * 32)
> - print(open(self.__name + '.out').read())
> + with open(self.__name + '.out') as output:
> + print(output.read())
> print(" <<< " + "=" * 32)
>
> def static(self):
> @@ -634,7 +635,8 @@ class inhfd_test:
> self.__my_file.write(self.__message)
> self.__my_file.flush()
> pid, status = os.waitpid(self.__peer_pid, 0)
> - print(open(self.__name + ".out").read())
> + with open(self.__name + ".out") as output:
> + print(output.read())
> self.__peer_pid = 0
> if not os.WIFEXITED(status) or os.WEXITSTATUS(status) != 42:
> raise test_fail_exc("test failed with %d" % status)
> @@ -688,7 +690,8 @@ class groups_test(zdtm_test):
> zdtm_test.__init__(self, 'zdtm/lib/groups', desc, flavor, freezer)
> if flavor.ns:
> self.__real_name = name
> - self.__subs = map(lambda x: x.strip(), open(name).readlines())
> + with open(name) as fd:
> + self.__subs = map(lambda x: x.strip(), fd.readlines())
> print("Subs:\n%s" % '\n'.join(self.__subs))
> else:
> self.__real_name = ''
> @@ -861,7 +864,8 @@ class criu_rpc:
> res = criu.restore()
> pidf = ctx.get('pidf')
> if pidf:
> - open(pidf, 'w').write('%d\n' % res.pid)
> + with open(pidf, 'w') as fd:
> + fd.write('%d\n' % res.pid)
> elif action == "page-server":
> res = criu.page_server_chld()
> p = criu_rpc_process()
> @@ -1006,7 +1010,8 @@ class criu:
> fcntl.fcntl(fd, fcntl.F_SETFD, fdflags & ~fcntl.FD_CLOEXEC)
> s_args += ["--status-fd", str(fd)]
>
> - ns_last_pid = open("/proc/sys/kernel/ns_last_pid").read()
> + with open("/proc/sys/kernel/ns_last_pid") as ns_last_pid_fd:
> + ns_last_pid = ns_last_pid_fd.read()
>
> ret = self.__criu.run(action, s_args, self.__criu_bin, self.__fault, strace, preexec, nowait)
>
> @@ -1032,7 +1037,8 @@ class criu:
> os.rename(os.path.join(__ddir, log), os.path.join(__ddir, log + ".fail"))
> # restore ns_last_pid to avoid a case when criu gets
> # PID of one of restored processes.
> - open("/proc/sys/kernel/ns_last_pid", "w+").write(ns_last_pid)
> + with open("/proc/sys/kernel/ns_last_pid", "w+") as fd:
> + fd.write(ns_last_pid)
> # try again without faults
> print("Run criu " + action)
> ret = self.__criu.run(action, s_args, self.__criu_bin, False, strace, preexec)
> @@ -1301,7 +1307,8 @@ def get_visible_state(test):
>
> cmaps = [[0, 0, ""]]
> last = 0
> - for mp in open("/proc/%s/root/proc/%s/maps" % (test.getpid(), pid)):
> + mapsfd = open("/proc/%s/root/proc/%s/maps" % (test.getpid(), pid))
> + for mp in mapsfd:
> m = list(map(lambda x: int('0x' + x, 0), mp.split()[0].split('-')))
>
> m.append(mp.split()[1])
> @@ -1316,14 +1323,16 @@ def get_visible_state(test):
> else:
> cmaps.append(m)
> last += 1
> + mapsfd.close()
>
> maps[pid] = set(map(lambda x: '%x-%x %s' % (x[0], x[1], " ".join(x[2:])), cmaps))
>
> cmounts = []
> try:
> r = re.compile("^\S+\s\S+\s\S+\s(\S+)\s(\S+)\s\S+\s[^-]*?(shared)?[^-]*?(master)?[^-]*?-")
> - for m in open("/proc/%s/root/proc/%s/mountinfo" % (test.getpid(), pid)):
> - cmounts.append(r.match(m).groups())
> + with open("/proc/%s/root/proc/%s/mountinfo" % (test.getpid(), pid)) as mountinfo:
> + for m in mountinfo:
> + cmounts.append(r.match(m).groups())
> except IOError as e:
> if e.errno != errno.EINVAL:
> raise e
> @@ -1614,7 +1623,8 @@ class Launcher:
> print(u"# Timestamp: " + now.strftime("%Y-%m-%d %H:%M") + " (GMT+1)", file=self.__file_report)
> print(u"# ", file=self.__file_report)
> print(u"1.." + str(nr_tests), file=self.__file_report)
> - self.__taint = open("/proc/sys/kernel/tainted").read()
> + with open("/proc/sys/kernel/tainted") as taintfd:
> + self.__taint = taintfd.read()
> if int(self.__taint, 0) != 0:
> print("The kernel is tainted: %r" % self.__taint)
> if not opts["ignore_taint"]:
> @@ -1643,7 +1653,8 @@ class Launcher:
> if len(self.__subs) >= self.__max:
> self.wait()
>
> - taint = open("/proc/sys/kernel/tainted").read()
> + with open("/proc/sys/kernel/tainted") as taintfd:
> + taint = taintfd.read()
> if self.__taint != taint:
> raise Exception("The kernel is tainted: %r (%r)" % (taint, self.__taint))
>
> @@ -1705,7 +1716,8 @@ class Launcher:
> self.__failed.append([sub['name'], failed_flavor])
> if self.__file_report:
> testline = u"not ok %d - %s # flavor %s" % (self.__runtest, sub['name'], failed_flavor)
> - output = open(sub['log']).read()
> + with open(sub['log']) as sublog:
> + output = sublog.read()
> details = {'output': output}
> tc.add_error_info(output = output)
> print(testline, file=self.__file_report)
> @@ -1718,7 +1730,8 @@ class Launcher:
> print(testline, file=self.__file_report)
>
> if sub['log']:
> - print(open(sub['log']).read().encode('ascii', 'ignore'))
> + with open(sub['log']) as sublog:
> + print(sublog.read().encode('ascii', 'ignore'))
> os.unlink(sub['log'])
>
> return True
> @@ -1749,6 +1762,7 @@ class Launcher:
> if self.__file_report:
> ts = TestSuite(opts['title'], self.__junit_test_cases, os.getenv("NODE_NAME"))
> self.__junit_file.write(TestSuite.to_xml_string([ts]))
> + self.__junit_file.close()
> self.__file_report.close()
>
> if opts['keep_going']:
> @@ -1767,7 +1781,8 @@ class Launcher:
>
>
> def all_tests(opts):
> - desc = eval(open(opts['set'] + '.desc').read())
> + with open(opts['set'] + '.desc') as fd:
> + desc = eval(fd.read())
>
> files = []
> mask = stat.S_IFREG | stat.S_IXUSR
> @@ -1797,7 +1812,8 @@ default_test = {}
> def get_test_desc(tname):
> d_path = tname + '.desc'
> if os.access(d_path, os.F_OK) and os.path.getsize(d_path) > 0:
> - return eval(open(d_path).read())
> + with open(d_path) as fd:
> + return eval(fd.read())
>
> return default_test
>
> @@ -1831,22 +1847,23 @@ def grep_errors(fname):
> first = True
> print_next = False
> before = []
> - for l in open(fname):
> - before.append(l)
> - if len(before) > 5:
> - before.pop(0)
> - if "Error" in l:
> - if first:
> - print_fname(fname, 'log')
> - print_sep("grep Error", "-", 60)
> - first = False
> - for i in before:
> - print_next = print_error(i)
> - before = []
> - else:
> - if print_next:
> - print_next = print_error(l)
> + with open(fname) as fd:
> + for l in fd:
> + before.append(l)
> + if len(before) > 5:
> + before.pop(0)
> + if "Error" in l:
> + if first:
> + print_fname(fname, 'log')
> + print_sep("grep Error", "-", 60)
> + first = False
> + for i in before:
> + print_next = print_error(i)
> before = []
> + else:
> + if print_next:
> + print_next = print_error(l)
> + before = []
> if not first:
> print_sep("ERROR OVER", "-", 60)
>
> @@ -1875,7 +1892,8 @@ def run_tests(opts):
> print("No such file")
> return
>
> - torun = map(lambda x: x.strip(), open(opts['from']))
> + with open(opts['from']) as fd:
> + torun = map(lambda x: x.strip(), fd)
> opts['keep_going'] = False
> run_all = True
> else:
> --
> 2.17.1
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list