commit:     50658449bd46f1a53b8eb11d34f6eefdd1ceba9c
Author:     Roy Marples <roy <AT> marples <DOT> name>
AuthorDate: Thu Sep 11 18:26:58 2014 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Thu Sep 11 18:26:58 2014 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/openrc.git;a=commit;h=50658449

Use exception-based approach for cgroup/ulimit setup

Note from William Hubbs:
I spoke with Roy about this, and he pointed out that user-defined
functions may need the limits applied, so it is better to go with a
method that uses exceptions to determine which functions apply the
limits.

X-Gentoo-Bug: 522408
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=522408

---
 sh/runscript.sh.in | 34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/sh/runscript.sh.in b/sh/runscript.sh.in
index d4c7c60..b89c460 100644
--- a/sh/runscript.sh.in
+++ b/sh/runscript.sh.in
@@ -209,19 +209,29 @@ unset _conf_d
 # Load any system overrides
 sourcex -e "@SYSCONFDIR@/rc.conf"
 
-# Apply any ulimit defined
-[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT}
-
-# Apply cgroups settings if defined
-if [ "$1" = "start" ] ; then
-       if [ "$(command -v cgroup_add_service)" = "cgroup_add_service" ]; then
-               cgroup_add_service /sys/fs/cgroup/openrc
-               cgroup_add_service /sys/fs/cgroup/systemd/system
+for _cmd; do
+       if [ "$_cmd" != status -a "$_cmd" != describe ]; then
+               # Apply any ulimit defined
+               [ -n "${rc_ulimit:-$RC_ULIMIT}" ] && \
+                       ulimit ${rc_ulimit:-$RC_ULIMIT}
+               # Apply cgroups settings if defined
+               if [ "$(command -v cgroup_add_service)" = \
+                   "cgroup_add_service" ]
+               then
+                       if [ -d /sys/fs/cgroup -a ! -w /sys/fs/cgroup ]; then
+                               eerror "No permission to apply cgroup settings"
+                               break
+                       fi
+                       cgroup_add_service /sys/fs/cgroup/openrc
+                       cgroup_add_service /sys/fs/cgroup/systemd/system
+               fi
+               [ "$(command -v cgroup_set_limits)" = \
+                   "cgroup_set_limits" ] && \
+                   cgroup_set_limits
+               break
        fi
-       [ "$(command -v cgroup_set_limits)" = "cgroup_set_limits" ] && \
-               cgroup_set_limits
-fi
-
+done
+ 
 # Load our script
 sourcex "$RC_SERVICE"
 

Reply via email to