uxc: don't restart containers when mount shows up
authorDaniel Golle <daniel@makrotopia.org>
Sat, 24 Jul 2021 00:28:10 +0000 (01:28 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Sat, 24 Jul 2021 23:51:59 +0000 (00:51 +0100)
procd triggers 'uxc boot' every time a new mount shows up which results
in containers to be restarted which had already been run and may have
ended reguarly, crashed or deliberately stopped.
As the intention of 'uxc boot' is to start containers which were still
waiting for volumes to become ready, really do only that.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
uxc.c

diff --git a/uxc.c b/uxc.c
index d1afc4c69b3a594e78757802a09b040a4bfcfbe0..b801d7f906574be3a43863d943a7c7773fecd100 100644 (file)
--- a/uxc.c
+++ b/uxc.c
@@ -742,6 +742,7 @@ static void block_cb(struct ubus_request *req, int type, struct blob_attr *msg)
 static int uxc_boot(void)
 {
        struct blob_attr *cur, *tb[__CONF_MAX];
+       struct runtime_state *s;
        int rem, ret = 0;
        char *name;
        unsigned int id;
@@ -759,6 +760,10 @@ static int uxc_boot(void)
                if (!tb[CONF_NAME] || !tb[CONF_PATH] || !tb[CONF_AUTOSTART] || !blobmsg_get_bool(tb[CONF_AUTOSTART]))
                        continue;
 
+               s = avl_find_element(&runtime, blobmsg_get_string(tb[CONF_NAME]), s, avl);
+               if (s)
+                       continue;
+
                /* make sure all volumes are ready before starting */
                if (tb[CONF_VOLUMES])
                        if (checkvolumes(tb[CONF_VOLUMES]))