From 7f075c1e3e99dc42bec414aa071c9e2fb5da0ded Mon Sep 17 00:00:00 2001
From: Silvio Rhatto <rhatto@riseup.net>
Date: Sat, 21 Aug 2010 18:37:48 -0300
Subject: [PATCH] Fixing lockfile checks for rsync handler

---
 handlers/rsync.in | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/handlers/rsync.in b/handlers/rsync.in
index 21e4ab2c..cf304ed6 100644
--- a/handlers/rsync.in
+++ b/handlers/rsync.in
@@ -847,7 +847,13 @@ function test_connect {
 function set_lockfile {
 
   if [ ! -z "$lockfile" ]; then
-    $touch $lockfile || warning "Could not create lockfile $lockfile"
+    mkdir -p `dirname $lockfile`
+    if ( set -o noclobber; echo "$$" > "$lockfile" ) &> /dev/null; then
+      trap 'rm -f "$lockfile"' INT TERM EXIT
+    else
+      info "Could not create lockfile $lockfile, exiting"
+      exit
+    fi
   fi
 
 }
@@ -860,6 +866,23 @@ function unset_lockfile {
 
 }
 
+function check_lockfile {
+
+  local pid
+
+  if [ ! -z "$lockfile" ] && [ -f "$lockfile" ]; then
+    pid="`cat $lockfile`"
+    if ps $pid &> /dev/null; then
+      info "Another backup is running for $lockfile, skipping run"
+      exit
+    else
+      info "Found old lockfile $lockfile, removing it"
+      unset_lockfile  
+    fi
+  fi
+
+}
+
 function set_filelist {
 
   filelist_flag=""
@@ -1045,6 +1068,7 @@ function end_mux {
 # the backup procedure
 
 eval_config
+check_lockfile
 set_lockfile
 set_rsync_options
 start_mux
-- 
GitLab