diff options
| author | Roy Marples <roy@marples.name> | 2008-05-12 23:17:45 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2008-05-12 23:17:45 +0000 | 
| commit | a89171ee9b20ec7062f77dc651fa873690fb50d5 (patch) | |
| tree | 0839c011aeb928db2fbb1d280063722d7b19cebd /src | |
| parent | 6d5d655b5212672319780e7c25a4da955eebcf75 (diff) | |
| download | openrc-a89171ee9b20ec7062f77dc651fa873690fb50d5.tar.xz | |
When stopping, stop services that need our provide as well, #79.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rc/runscript.c | 15 | 
1 files 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); | 
