def __init__(self, log):
self.log = log
-def check_valgrind(logfile):
- log = logfile.read().decode('utf-8')
+def check_valgrind(log):
m = VPAT.search(log)
- assert m is not None, 'Internal error: valgrind log did not match.'
+ if m is None:
+ print('Internal error: valgrind log did not match.')
+ print('-- valgrind log:')
+ print(log)
+ print('-- end log --')
+ assert False
errors = int(m.group(1))
if errors > 0:
encoding='utf-8', check=check)
if valgrind:
- check_valgrind(vout)
+ check_valgrind(vout.read().decode('utf-8'))
return res
def run(self):
"""Background thread which runs "bcachefs fusemount" under valgrind"""
- vout = None
+ vlog = None
cmd = []
if ENABLE_VALGRIND:
- vout = tempfile.NamedTemporaryFile()
+ vlog = tempfile.NamedTemporaryFile()
cmd += [ 'valgrind',
'--leak-check=full',
- '--log-file={}'.format(vout.name) ]
+ '--log-file={}'.format(vlog.name) ]
cmd += [ BCH_PATH,
'fusemount', '-f', self.dev, self.mnt]
self.stdout = out1 + out2
self.stderr = err.read()
self.returncode = self.proc.returncode
- self.vout = vout
+ self.vout = vlog.read().decode('utf-8')
def expect(self, pipe, regex):
"""Wait for the child process to mount."""
def unmount(self, timeout=None):
print("Unmounting fuse.")
run("fusermount3", "-zu", self.mnt)
- print("Waiting for thread to exit.")
if self.thread:
+ print("Waiting for thread to exit.")
self.thread.join(timeout)
if self.thread.is_alive():
self.proc.kill()
self.thread.join()
+ else:
+ print("Thread was already done.")
self.thread = None
self.ready.clear()