[source] procd: introduce procd_lock for init script protection

LEDE Commits lede-commits at lists.infradead.org
Tue Jan 2 05:29:23 PST 2018


blogic pushed a commit to source.git, branch master:
https://git.lede-project.org/e410f785a4d5676eb71715e8c5c4b3445c6478e3

commit e410f785a4d5676eb71715e8c5c4b3445c6478e3
Author: Roman Yeryomin <roman at advem.lv>
AuthorDate: Thu Dec 14 23:54:26 2017 +0200

    procd: introduce procd_lock for init script protection
    
    Use flock to protect init script from concurrent execution
    (of the same script).
    Important for services which generate native config files.
    
    Signed-off-by: Roman Yeryomin <roman at advem.lv>
    Signed-off-by: Andrejs Hanins <ahanins at gmail.com>
---
 package/system/procd/files/procd.sh | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh
index 91e2371..b8d3513 100644
--- a/package/system/procd/files/procd.sh
+++ b/package/system/procd/files/procd.sh
@@ -38,6 +38,20 @@
 PROCD_RELOAD_DELAY=1000
 _PROCD_SERVICE=
 
+procd_lock() {
+	local basescript=$(readlink "$initscript")
+	local service_name="$(basename ${basescript:-$initscript})"
+
+	flock -n 1000 &> /dev/null
+	if [ "$?" != "0" ]; then
+		exec 1000>/var/lock/procd_${service_name}.lock
+		flock 1000
+		if [ "$?" != "0" ]; then
+			logger "warning: procd flock for $service_name failed"
+		fi
+	fi
+}
+
 _procd_call() {
 	local old_cb
 
@@ -47,6 +61,7 @@ _procd_call() {
 }
 
 _procd_wrapper() {
+	procd_lock
 	while [ -n "$1" ]; do
 		eval "$1() { _procd_call _$1 \"\$@\"; }"
 		shift



More information about the lede-commits mailing list