From a89171ee9b20ec7062f77dc651fa873690fb50d5 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Mon, 12 May 2008 23:17:45 +0000 Subject: [PATCH] When stopping, stop services that need our provide as well, #79. --- src/rc/runscript.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/rc/runscript.c b/src/rc/runscript.c index e234b766..edc704e8 100644 --- a/src/rc/runscript.c +++ b/src/rc/runscript.c @@ -103,6 +103,7 @@ static RC_STRINGLIST *types_nu = NULL; static RC_STRINGLIST *types_nua = NULL; static RC_STRINGLIST *types_m = NULL; static RC_STRINGLIST *types_mua = NULL; +static RC_STRINGLIST *types_p = NULL; #ifdef __linux__ static void (*selinux_run_init_old)(void); @@ -335,6 +336,7 @@ static void cleanup(void) rc_stringlist_free(types_nua); rc_stringlist_free(types_m); rc_stringlist_free(types_mua); + rc_stringlist_free(types_p); rc_plugin_unload(); rc_deptree_free(deptree); @@ -649,6 +651,9 @@ static void setup_types(void) rc_stringlist_add(types_mua, "needsme"); rc_stringlist_add(types_mua, "usesme"); rc_stringlist_add(types_mua, "beforeme"); + + types_p = rc_stringlist_new(); + rc_stringlist_add(types_p, "iprovide"); } static bool in_list(RC_STRINGLIST *list, char *string) @@ -947,9 +952,15 @@ static void svc_stop(bool deps) if (! types_m) setup_types(); - tmplist = NULL; - services = rc_deptree_depends(deptree, types_m, applet_list, + tmplist = rc_deptree_depends(deptree, types_p, applet_list, + runlevel, 0); + if (!tmplist) + tmplist = rc_stringlist_new(); + rc_stringlist_add(tmplist, applet); + services = rc_deptree_depends(deptree, types_m, tmplist, runlevel, depoptions); + rc_stringlist_free(tmplist); + tmplist = NULL; if (services) { TAILQ_FOREACH_REVERSE(svc, services, rc_stringlist, entries) { state = rc_service_state(svc->value);