]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/actions/container_manager.py
version: Don't fail when uname contains only two numbers
[waydroid.git] / tools / actions / container_manager.py
index e36cfbfcb503e16e5173d2bf1f30f74f0bb0210e..7321c148dcf5e3f991347d9df2170516fd9e28a6 100644 (file)
@@ -26,9 +26,9 @@ class DbusContainerManager(dbus.service.Object):
     def Start(self, session):
         do_start(self.args, session)
 
-    @dbus.service.method("id.waydro.ContainerManager", in_signature='', out_signature='')
-    def Stop(self):
-        stop(self.args)
+    @dbus.service.method("id.waydro.ContainerManager", in_signature='b', out_signature='')
+    def Stop(self, quit_session):
+        stop(self.args, quit_session)
 
     @dbus.service.method("id.waydro.ContainerManager", in_signature='', out_signature='')
     def Freeze(self):
@@ -123,15 +123,12 @@ def start(args):
 
 def do_start(args, session):
     if "session" in args:
-        logging.info("Already tracking a session")
-        return
-
-    args.session = session
+        raise RuntimeError("Already tracking a session")
 
     # Networking
     command = [tools.config.tools_src +
                "/data/scripts/waydroid-net.sh", "start"]
-    tools.helpers.run.user(args, command, check=False)
+    tools.helpers.run.user(args, command)
 
     # Sensors
     if which("waydroid-sensord"):
@@ -140,12 +137,12 @@ def do_start(args, session):
 
     # Mount rootfs
     cfg = tools.config.load(args)
-    helpers.images.mount_rootfs(args, cfg["waydroid"]["images_path"], args.session)
+    helpers.images.mount_rootfs(args, cfg["waydroid"]["images_path"], session)
 
     helpers.protocol.set_aidl_version(args)
 
     # Mount data
-    helpers.mount.bind(args, args.session["waydroid_data"],
+    helpers.mount.bind(args, session["waydroid_data"],
                        tools.config.defaults["data"])
 
     # Cgroup hacks
@@ -165,20 +162,11 @@ def do_start(args, session):
     set_permissions(args)
 
     helpers.lxc.start(args)
-    lxc_status = helpers.lxc.status(args)
-    timeout = 10
-    while lxc_status != "RUNNING" and timeout > 0:
-        lxc_status = helpers.lxc.status(args)
-        logging.info(
-            "waiting {} seconds for container to start...".format(timeout))
-        timeout = timeout - 1
-        time.sleep(1)
-    if lxc_status != "RUNNING":
-        raise OSError("container failed to start")
-
     services.hardware_manager.start(args)
 
-def stop(args):
+    args.session = session
+
+def stop(args, quit_session=True):
     try:
         services.hardware_manager.stop(args)
         status = helpers.lxc.status(args)
@@ -212,10 +200,11 @@ def stop(args):
         helpers.mount.umount_all(args, tools.config.defaults["data"])
 
         if "session" in args:
-            try:
-                os.kill(int(args.session["pid"]), signal.SIGUSR1)
-            except:
-                pass
+            if quit_session:
+                try:
+                    os.kill(int(args.session["pid"]), signal.SIGUSR1)
+                except:
+                    pass
             del args.session
     except:
         pass