Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 346656 Details for
Bug 467368
sys-apps/openrc - stacked runlevels only work one level deep (and other fixes)
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
Patch to fix run-level stacking (chaining) issues.
openrc-0.11.8-runlevel_chaining.patch (text/plain), 4.12 KB, created by
Max Hacking
on 2013-04-26 17:37:40 UTC
(
hide
)
Description:
Patch to fix run-level stacking (chaining) issues.
Filename:
MIME Type:
Creator:
Max Hacking
Created:
2013-04-26 17:37:40 UTC
Size:
4.12 KB
patch
obsolete
>--- openrc-0.11.8.orig/src/librc/librc.c 2012-12-07 16:53:28.000000000 +0100 >+++ openrc-0.11.8/src/librc/librc.c 2013-04-26 01:23:02.450136416 +0200 >@@ -892,12 +892,9 @@ > list = rc_services_in_runlevel(runlevel); > stacks = rc_runlevel_stacks(runlevel); > TAILQ_FOREACH(stack, stacks, entries) { >- sl = rc_services_in_runlevel(stack->value); >- if (list != NULL) { >- TAILQ_CONCAT(list, sl, entries); >- free(sl); >- } else >- list = sl; >+ sl = rc_services_in_runlevel_stacked(stack->value); >+ TAILQ_CONCAT(list, sl, entries); >+ free(sl); > } > return list; > } >--- openrc-0.11.8.orig/src/rc/rc-status.c 2012-12-07 16:53:28.000000000 +0100 >+++ openrc-0.11.8/src/rc/rc-status.c 2013-04-26 19:23:39.995490728 +0200 >@@ -171,6 +171,26 @@ > rc_stringlist_free(l); > } > >+static void >+print_stacked_services(const char *runlevel) >+{ >+ RC_STRINGLIST *stackedlevels, *servicelist; >+ RC_STRING *stackedlevel; >+ >+ stackedlevels = rc_runlevel_stacks(runlevel); >+ TAILQ_FOREACH(stackedlevel, stackedlevels, entries) { >+ if (rc_stringlist_find(levels, stackedlevel->value) != NULL) >+ continue; >+ print_level("Stacked", stackedlevel->value); >+ servicelist = rc_services_in_runlevel(stackedlevel->value); >+ print_services(stackedlevel->value, servicelist); >+ rc_stringlist_free(servicelist); >+ print_stacked_services(stackedlevel->value); >+ } >+ rc_stringlist_free(stackedlevels); >+ stackedlevels = NULL; >+} >+ > #include "_usage.h" > #define extraopts "[runlevel1] [runlevel2] ..." > #define getoptstring "aclrsu" getoptstring_COMMON >@@ -197,7 +217,7 @@ > int > rc_status(int argc, char **argv) > { >- RC_STRING *s, *l, *t; >+ RC_STRING *s, *l, *t, *level; > char *p, *runlevel = NULL; > int opt, aflag = 0, retval = 0; > >@@ -278,18 +298,7 @@ > print_level(NULL, l->value); > services = rc_services_in_runlevel(l->value); > print_services(l->value, services); >- nservices = rc_runlevel_stacks(l->value); >- TAILQ_FOREACH(s, nservices, entries) { >- if (rc_stringlist_find(levels, s->value) != NULL) >- continue; >- print_level("Stacked", s->value); >- sservices = rc_services_in_runlevel(s->value); >- print_services(s->value, sservices); >- rc_stringlist_free(sservices); >- } >- sservices = NULL; >- rc_stringlist_free(nservices); >- nservices = NULL; >+ print_stacked_services(l->value); > rc_stringlist_free(services); > services = NULL; > } >@@ -315,16 +324,14 @@ > services = rc_services_in_runlevel(NULL); > sservices = rc_stringlist_new(); > TAILQ_FOREACH(l, levels, entries) { >- nservices = rc_services_in_runlevel(l->value); >+ nservices = rc_services_in_runlevel_stacked(l->value); > TAILQ_CONCAT(sservices, nservices, entries); > free(nservices); > } > TAILQ_FOREACH_SAFE(s, services, entries, t) { >- if (rc_stringlist_find(sservices, s->value) || >- rc_service_state(s->value) & >- (RC_SERVICE_STOPPED | RC_SERVICE_HOTPLUGGED)) >- { >- TAILQ_REMOVE(services, s, entries); >+ if ((rc_stringlist_find(sservices, s->value) || >+ (rc_service_state(s->value) & (RC_SERVICE_STOPPED | RC_SERVICE_HOTPLUGGED)))) { >+ TAILQ_REMOVE(services, s, entries); > free(s->value); > free(s); > } >@@ -335,20 +342,20 @@ > alist = rc_stringlist_new(); > l = rc_stringlist_add(alist, ""); > p = l->value; >- if (!runlevel) >- runlevel = rc_runlevel_get(); >- TAILQ_FOREACH_SAFE(s, services, entries, t) { >- l->value = s->value; >- unsetenv("RC_SVCNAME"); >- setenv("RC_SVCNAME", l->value, 1); >- tmp = rc_deptree_depends(deptree, needsme, alist, runlevel, RC_DEP_TRACE); >- if (TAILQ_FIRST(tmp)) { >- TAILQ_REMOVE(services, s, entries); >- TAILQ_INSERT_TAIL(nservices, s, entries); >+ TAILQ_FOREACH(level, levels, entries) { >+ TAILQ_FOREACH_SAFE(s, services, entries, t) { >+ l->value = s->value; >+ setenv("RC_SVCNAME", l->value, 1); >+ tmp = rc_deptree_depends(deptree, needsme, alist, level->value, RC_DEP_TRACE); >+ if (TAILQ_FIRST(tmp)) { >+ TAILQ_REMOVE(services, s, entries); >+ TAILQ_INSERT_TAIL(nservices, s, entries); >+ } >+ rc_stringlist_free(tmp); > } >- rc_stringlist_free(tmp); > } > l->value = p; >+ unsetenv("RC_SVCNAME"); > print_level("Dynamic", "needed"); > print_services(NULL, nservices); > print_level("Dynamic", "manual");
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 467368
:
346656
|
346840
|
346842
|
346876