diff --git a/src/include/66/svc.h b/src/include/66/svc.h index 0c55293a266e47cbc57575cbf46eca0a2f830855..11d75484f042d95ec1ed6a14044c941120c46080 100644 --- a/src/include/66/svc.h +++ b/src/include/66/svc.h @@ -55,7 +55,7 @@ extern int svc_compute_ns(resolve_service_t *res, uint8_t what, ssexec_t *info, extern int svc_scandir_ok (char const *dir) ; extern int svc_scandir_send(char const *scandir,char const *signal) ; extern int svc_send_wait(char const *const *list, unsigned int nservice, char **sig, unsigned int siglen, ssexec_t *info) ; -extern void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen) ; +extern void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen, ssexec_t *info) ; extern void svc_send_fdholder(char const *socket, char const *signal) ; #endif diff --git a/src/lib66/svc/svc_unsupervise.c b/src/lib66/svc/svc_unsupervise.c index b9da67ffbce97311e88af1983559a98207620ac8..0b96d8e98c957163520fd2b3307252d3d8838b82 100644 --- a/src/lib66/svc/svc_unsupervise.c +++ b/src/lib66/svc/svc_unsupervise.c @@ -15,54 +15,42 @@ #include <oblibs/log.h> #include <oblibs/sastr.h> -#include <skalibs/genalloc.h> - #include <66/state.h> #include <66/sanitize.h> #include <66/graph.h> #include <66/svc.h> #include <66/enum.h> +#include <66/symlink.h> +#include <66/constants.h> static void sanitize_it(resolve_service_t *res) { log_flow() ; - - ss_state_t sta = STATE_ZERO ; - sanitize_fdholder(res, STATE_FLAGS_FALSE) ; + ss_state_t sta = STATE_ZERO ; if (!state_read(&sta, res)) log_dieu(LOG_EXIT_SYS, "read state file of: ", res->sa.s + res->name) ; + sanitize_fdholder(res, &sta, STATE_FLAGS_FALSE) ; + state_set_flag(&sta, STATE_FLAGS_TOUNSUPERVISE, STATE_FLAGS_TRUE) ; state_set_flag(&sta, STATE_FLAGS_ISUP, STATE_FLAGS_FALSE) ; - if (!state_write(&sta, res)) - log_dieu(LOG_EXIT_SYS, "write state file of: ", res->sa.s + res->name) ; - - sanitize_scandir(res) ; - sanitize_livestate(res) ; + sanitize_scandir(res, &sta) ; - log_info("Unsupervised successfully: ", res->sa.s + res->name) ; -} - -static void unsupervise_logger(unsigned int idx, resolve_service_t *ares, unsigned int areslen) -{ - log_flow() ; + state_set_flag(&sta, STATE_FLAGS_TOUNSUPERVISE, STATE_FLAGS_TRUE) ; - if (ares[idx].logger.want && ares[idx].type == TYPE_CLASSIC) { + sanitize_livestate(res, &sta) ; - char *name = ares[idx].sa.s + ares[idx].logger.name ; - int aresid = service_resolve_array_search(ares, areslen, name) ; - if (aresid < 0) - log_dieu(LOG_EXIT_SYS,"find ares id of: ", name, " -- please make a bug reports") ; + if (!symlink_switch(res, SYMLINK_SOURCE)) + log_dieusys(LOG_EXIT_SYS, "switch service symlink to source for: ", res->sa.s + res->name) ; - sanitize_it(&ares[aresid]) ; - } + log_info("Unsupervised successfully: ", res->sa.s + res->name) ; } -/** this function considers that the service is already down */ -void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen) +/** this function considers that the service is already down except for the logger */ +void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen, ssexec_t *info) { log_flow() ; @@ -83,8 +71,6 @@ void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve sanitize_it(&ares[aresid]) ; - unsupervise_logger(aresid, ares, areslen) ; - if ((ares[aresid].type == TYPE_BUNDLE || ares[aresid].type == TYPE_MODULE) && ares[aresid].dependencies.ncontents) { sa.len = 0, bpos = 0 ; @@ -102,7 +88,6 @@ void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve } } } - stralloc_free(&sa) ; }