From 23d4c3bf52e4c2b9e742688264c812d1e07a4329 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Sun, 6 Aug 2023 19:41:27 +1100
Subject: [PATCH] avoid to read twice the state file

---
 src/lib66/sanitize/sanitize_livestate.c | 8 +++++---
 src/lib66/sanitize/sanitize_scandir.c   | 8 +++++++-
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/lib66/sanitize/sanitize_livestate.c b/src/lib66/sanitize/sanitize_livestate.c
index 6d747f26..9e1f56ea 100644
--- a/src/lib66/sanitize/sanitize_livestate.c
+++ b/src/lib66/sanitize/sanitize_livestate.c
@@ -111,13 +111,15 @@ void sanitize_livestate(resolve_service_t *res)
 
     } else {
 
-        if (service_is(&sta, STATE_FLAGS_TOUNSUPERVISE) == STATE_FLAGS_TRUE) {
+        if (sta.tounsupervise == STATE_FLAGS_TRUE) {
 
             log_trace("unlink: ", ste) ;
             unlink_void(ste) ;
 
-            if (!state_messenger(res, STATE_FLAGS_TOUNSUPERVISE, STATE_FLAGS_FALSE))
-                log_dieusys(LOG_EXIT_SYS, "send message to state of: ", name) ;
+            state_set_flag(&sta, STATE_FLAGS_TOUNSUPERVISE, STATE_FLAGS_FALSE) ;
+
+            if (!state_write(&sta, res))
+                log_dieusys(LOG_EXIT_SYS, "write status file of: ", name) ;
         }
     }
 }
diff --git a/src/lib66/sanitize/sanitize_scandir.c b/src/lib66/sanitize/sanitize_scandir.c
index c89e15cd..4b7680e1 100644
--- a/src/lib66/sanitize/sanitize_scandir.c
+++ b/src/lib66/sanitize/sanitize_scandir.c
@@ -83,6 +83,12 @@ static void compute_supervision_dir(resolve_service_t *res)
     int r = dir_create_parent(event, 0700) ;
     if (!r)
         log_dieusys(LOG_EXIT_SYS, "create directory: ", event) ;
+    /**
+     *
+     * ISSUE: All the following means writting on a possible
+     * ro mountpoint, so crash occurs.
+     *
+     * */
 
     if (chown(event, -1, getegid()) < 0)
         log_dieusys(LOG_EXIT_SYS, "chown: ", event) ;
@@ -118,7 +124,7 @@ void sanitize_scandir(resolve_service_t *res)
         log_dieu(LOG_EXIT_SYS, "read state file of: ", name) ;
 
     r = access(res->sa.s + res->live.scandir, F_OK) ;
-    if (r == -1 && service_is(&sta, STATE_FLAGS_TOINIT) == STATE_FLAGS_TRUE) {
+    if (r == -1 && (sta.toinit == STATE_FLAGS_TRUE || sta.isearlier == STATE_FLAGS_TRUE)) {
 
         if (res->type == TYPE_CLASSIC)
             scandir_scandir_to_livestate(res) ;
-- 
GitLab