From 7263d705ab66d4ceb8565d4e1213bbce5892529f Mon Sep 17 00:00:00 2001 From: Valentin David Date: Thu, 11 Jul 2019 20:36:39 +0200 Subject: Fix a double unmount in chroot sandbox It appears the hack that was used to not double-unmount did not work. The error was just ignored but an error message would be printed. --- src/buildstream/sandbox/_mounter.py | 7 ++++--- src/buildstream/sandbox/_sandboxchroot.py | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/buildstream/sandbox/_mounter.py b/src/buildstream/sandbox/_mounter.py index e6054c20d..803325307 100644 --- a/src/buildstream/sandbox/_mounter.py +++ b/src/buildstream/sandbox/_mounter.py @@ -90,7 +90,7 @@ class Mounter(): @classmethod @contextmanager def mount(cls, dest, src=None, stdout=sys.stdout, - stderr=sys.stderr, mount_type=None, **kwargs): + stderr=sys.stderr, mount_type=None, unmount=True, **kwargs): def kill_proc(): cls._umount(dest, stdout, stderr) @@ -100,9 +100,10 @@ class Mounter(): path = cls._mount(dest, src, mount_type, stdout=stdout, stderr=stderr, options=options) try: with _signals.terminator(kill_proc): - yield path + yield path finally: - cls._umount(dest, stdout, stderr) + if unmount: + cls._umount(dest, stdout, stderr) # bind_mount() # diff --git a/src/buildstream/sandbox/_sandboxchroot.py b/src/buildstream/sandbox/_sandboxchroot.py index 95e247e83..49f493140 100644 --- a/src/buildstream/sandbox/_sandboxchroot.py +++ b/src/buildstream/sandbox/_sandboxchroot.py @@ -288,11 +288,11 @@ class SandboxChroot(Sandbox): # Remount root RO if necessary if flags & flags & SandboxFlags.ROOT_READ_ONLY: - root_mount = Mounter.mount(rootfs, stdout=stdout, stderr=stderr, remount=True, ro=True, bind=True) # Since the exit stack has already registered a mount # for this path, we do not need to register another # umount call. - root_mount.__enter__() + stack.enter_context(Mounter.mount(rootfs, stdout=stdout, stderr=stderr, unmount=False, + remount=True, ro=True, bind=True)) yield -- cgit v1.2.1