Skip to content
Snippets Groups Projects
Commit c70bd074 authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

avoid usage of genalloc

parent 66b49dae
No related branches found
No related tags found
No related merge requests found
...@@ -24,24 +24,24 @@ ...@@ -24,24 +24,24 @@
#include <66/service.h> #include <66/service.h>
#include <66/ssexec.h> #include <66/ssexec.h>
int rc_send(ssexec_t *info,genalloc *ga,char const *sig,char const *const *envp) int rc_send(ssexec_t *info, resolve_service_t *sv, unsigned int len, char const *sig)
{ {
log_flow() ; log_flow() ;
size_t i = 0 ; unsigned int pos = 0 ;
int nargc = 3 + genalloc_len(resolve_service_t,ga) ; int nargc = 3 + len ;
char const *newargv[nargc] ; char const *newargv[nargc] ;
unsigned int m = 0 ; unsigned int m = 0 ;
newargv[m++] = "fake_name" ; newargv[m++] = "rc_send" ;
newargv[m++] = sig ; newargv[m++] = sig ;
for (; i < genalloc_len(resolve_service_t,ga) ; i++) for (; pos < len ; pos++)
newargv[m++] = genalloc_s(resolve_service_t,ga)[i].sa.s + genalloc_s(resolve_service_t,ga)[i].name ; newargv[m++] = sv[pos].sa.s + sv[pos].name ;
newargv[m++] = 0 ; newargv[m++] = 0 ;
if (ssexec_dbctl(nargc,newargv,envp,info)) if (ssexec_dbctl(nargc, newargv, (char const *const *) environ, info))
return 0 ; return 0 ;
return 1 ; return 1 ;
......
...@@ -31,84 +31,78 @@ ...@@ -31,84 +31,78 @@
#include <s6-rc/s6rc-servicedir.h> #include <s6-rc/s6rc-servicedir.h>
int rc_unsupervise(ssexec_t *info,genalloc *ga,char const *sig,char const *const *envp) int rc_unsupervise(ssexec_t *info, resolve_service_t *sv, unsigned int len)
{ {
log_flow() ; log_flow() ;
size_t i = 0 ; unsigned int pos = 0, e = 0 ;
resolve_service_t_ref pres ; resolve_service_t_ref pres ;
stralloc sares = STRALLOC_ZERO ;
ss_state_t sta = STATE_ZERO ; ss_state_t sta = STATE_ZERO ;
char prefix[info->treename.len + 2] ; char prefix[info->treename.len + 2] ;
memcpy(prefix,info->treename.s,info->treename.len) ; auto_strings(prefix, info->treename.s, "-") ;
memcpy(prefix + info->treename.len,"-",1) ;
prefix[info->treename.len + 1] = 0 ;
char live[info->livetree.len + 1 + info->treename.len + 1 ]; char live[info->livetree.len + 1 + info->treename.len + 1 ];
memcpy(live,info->livetree.s,info->livetree.len) ; auto_strings(live, info->livetree.s, "/", info->treename.s) ;
live[info->livetree.len] = '/' ;
memcpy(live + info->livetree.len + 1,info->treename.s,info->treename.len) ; if (!db_switch_to(info, SS_SWSRC)) {
live[info->livetree.len + 1 + info->treename.len] = 0 ; log_warnu("switch ", info->treename.s, " to source") ;
if (!db_switch_to(info,envp,SS_SWSRC))
{
log_warnu("switch ",info->treename.s," to source") ;
goto err ; goto err ;
} }
if (!rc_send(info,ga,sig,envp)) if (!rc_send(info, ga, sig, envp)) {
{
log_warnu("stop services") ; log_warnu("stop services") ;
goto err ; goto err ;
} }
for (; i < genalloc_len(resolve_service_t,ga) ; i++) for (; pos < len ; pos++) {
{
char const *string = genalloc_s(resolve_service_t,ga)[i].sa.s ; pres = &sv[pos] ;
char const *name = string + genalloc_s(resolve_service_t,ga)[i].name ; char const *string = pres->sa.s ;
log_trace("delete directory service: ",string + genalloc_s(resolve_service_t,ga)[i].runat) ; char const *name = string + pres->name ;
s6rc_servicedir_unsupervise(live,prefix,name,0) ;
if (rm_rf(string + genalloc_s(resolve_service_t,ga)[i].runat) < 0) goto err ; log_trace("delete directory service: ", string + pres->runat) ;
} s6rc_servicedir_unsupervise(live, prefix, name, 0) ;
if (!sa_pointo(&sares,info,SS_NOTYPE,SS_RESOLVE_SRC))
{ if (rm_rf(string + pres->runat) < 0)
log_warnusys("set revolve pointer to source") ; goto err ;
goto err ;
} }
for (i = 0 ; i < genalloc_len(resolve_service_t,ga) ; i++)
{ char res_s[info->base.len + SS_SYSTEM + 1 + info->treename.len + SS_SVDIRS_LEN + 1] ;
pres = &genalloc_s(resolve_service_t,ga)[i] ; auto_strings(res_s, info->base.s, SS_SYSTEM, "/", info->treename.s, SS_SVDIRS) ;
for (pos = 0 ; pos < len ; pos++) {
pres = &sv[pos] ;
char const *string = pres->sa.s ; char const *string = pres->sa.s ;
char const *name = string + pres->name ; char const *name = string + pres->name ;
char const *state = string + pres->state ; char const *state = string + pres->state ;
// remove the resolve/state file if the service is disabled // remove the resolve/state file if the service is disabled
if (!pres->disen) if (!pres->disen)
{ {
log_trace("Delete resolve file of: ",name) ; log_trace("Delete resolve file of: ", name) ;
resolve_rmfile(sares.s,name) ; resolve_rmfile(res_s, name) ;
log_trace("Delete state file of: ",name) ; log_trace("Delete state file of: ", name) ;
state_rmfile(state,name) ; state_rmfile(state, name) ;
} }
else else
{ {
state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_FALSE) ; state_setflag(&sta, SS_FLAGS_RELOAD, SS_FLAGS_FALSE) ;
state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_TRUE) ; state_setflag(&sta, SS_FLAGS_INIT, SS_FLAGS_TRUE) ;
// state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; // state_setflag(&sta, SS_FLAGS_UNSUPERVISE, SS_FLAGS_FALSE) ;
state_setflag(&sta,SS_FLAGS_STATE,SS_FLAGS_FALSE) ; state_setflag(&sta, SS_FLAGS_STATE, SS_FLAGS_FALSE) ;
state_setflag(&sta,SS_FLAGS_PID,SS_FLAGS_FALSE) ; state_setflag(&sta, SS_FLAGS_PID, SS_FLAGS_FALSE) ;
log_trace("Write state file of: ",name) ; log_trace("Write state file of: ",name) ;
if (!state_write(&sta,state,name)) if (!state_write(&sta, state, name))
{ {
log_warnusys("write state file of: ",name) ; log_warnusys("write state file of: ", name) ;
goto err ; goto err ;
} }
} }
log_info("Unsupervised successfully: ",name) ; log_info("Unsupervised successfully: ", name) ;
} }
stralloc_free(&sares) ; e = 1 ;
return 1 ;
err: err:
stralloc_free(&sares) ; return e ;
return 0 ;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment