summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorajacoutot <ajacoutot@openbsd.org>2016-06-19 10:50:27 +0000
committerajacoutot <ajacoutot@openbsd.org>2016-06-19 10:50:27 +0000
commita150a6a3d06d9ad3648f5ba7147c7d7aba021bde (patch)
treea884853def2d195495501b64fdf55cc608600f09
parentgrep(1) /etc/rc.conf instead of /etc/rc to detect whether a particular (diff)
downloadwireguard-openbsd-a150a6a3d06d9ad3648f5ba7147c7d7aba021bde.tar.xz
wireguard-openbsd-a150a6a3d06d9ad3648f5ba7147c7d7aba021bde.zip
Cache result of often used functions (svc_is_{base,meta,special}).
Large speedup when iterating over all rc.d scripts. with and ok robert@
-rw-r--r--usr.sbin/rcctl/rcctl.sh20
1 files changed, 19 insertions, 1 deletions
diff --git a/usr.sbin/rcctl/rcctl.sh b/usr.sbin/rcctl/rcctl.sh
index 2b92f4e847e..4011ab45307 100644
--- a/usr.sbin/rcctl/rcctl.sh
+++ b/usr.sbin/rcctl/rcctl.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $OpenBSD: rcctl.sh,v 1.97 2016/06/19 10:46:08 ajacoutot Exp $
+# $OpenBSD: rcctl.sh,v 1.98 2016/06/19 10:50:27 ajacoutot Exp $
#
# Copyright (c) 2014, 2015 Antoine Jacoutot <ajacoutot@openbsd.org>
# Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -150,7 +150,13 @@ svc_is_base()
local _svc=$1
[ -n "${_svc}" ] || return
+ [ "${_cached_svc_is_base[${_svc}]}" ] && \
+ return ${_cached_svc_is_base[${_svc}]}
+
grep -qw "^${_svc}_flags" /etc/rc.conf
+
+ _cached_svc_is_base[${_svc}]=$?
+ return ${_cached_svc_is_base[${_svc}]}
}
svc_is_meta()
@@ -158,7 +164,13 @@ svc_is_meta()
local _svc=$1
[ -n "${_svc}" ] || return
+ [ "${_cached_svc_is_meta[${_svc}]}" ] && \
+ return ${_cached_svc_is_meta[${_svc}]}
+
[ -r "/etc/rc.d/${_svc}" ] && ! grep -qw "^rc_cmd" /etc/rc.d/${_svc}
+
+ _cached_svc_is_meta[${_svc}]=$?
+ return ${_cached_svc_is_meta[${_svc}]}
}
svc_is_special()
@@ -166,7 +178,13 @@ svc_is_special()
local _svc=$1
[ -n "${_svc}" ] || return
+ [ "${_cached_svc_is_special[${_svc}]}" ] && \
+ return ${_cached_svc_is_special[${_svc}]}
+
echo ${_special_svcs} | grep -qw -- ${_svc}
+
+ _cached_svc_is_special[${_svc}]=$?
+ return ${_cached_svc_is_special[${_svc}]}
}
svc_ls()