From e6d6fc4594d6310f8510e92bae6859884355a8b9 Mon Sep 17 00:00:00 2001 From: Michael Gebetsroither Date: Sat, 6 Nov 2010 20:17:12 +0100 Subject: [PATCH] grml-screen: do not get confused by externally created pidfiles --- usr_bin/grml-screen | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/usr_bin/grml-screen b/usr_bin/grml-screen index 7deeb77..73bdea9 100755 --- a/usr_bin/grml-screen +++ b/usr_bin/grml-screen @@ -16,37 +16,41 @@ # FIXME: fix for screen race-conditions PID_FILE_="/var/run/grml-screen" +PID_FILE_CREATED_="false" MY_PID_="$$" if [ ! -d "/var/run/screen/S-$USER" ]; then # no /var/run/screen/S-$USER and possible no /var/run/screen either -> locking for i in `seq 40`; do # 40*0.25 = 10 seconds if lockfile-create --retry 0 $PID_FILE_; then echo $MY_PID_ >$PID_FILE_ + PID_FILE_CREATED_="true" break fi sleep 0.25 done fi -if [ -f $PID_FILE_ ]; then - # FORK BEGIN - ( - for i in `seq 40`; do # 40*0.25 = 10 seconds - if [ ! -d "/var/run/screen/S-$USER" ]; then - sleep 0.25 # educated guess - else - break +if [ $PID_FILE_CREATED_ = "true" ]; then + if [ -f $PID_FILE_ ]; then + # FORK BEGIN + ( + for i in `seq 40`; do # 40*0.25 = 10 seconds + if [ ! -d "/var/run/screen/S-$USER" ]; then + sleep 0.25 # educated guess + else + break + fi + done + if [ `cat $PID_FILE_` = $MY_PID_ ]; then + rm $PID_FILE_ + lockfile-remove $PID_FILE_ fi - done - if [ `cat $PID_FILE_` = $MY_PID_ ]; then - rm $PID_FILE_ - lockfile-remove $PID_FILE_ + )& + # FORK END + else + SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))" + echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" + sleep $SLEEP_TIME_ fi - )& - # FORK END -else - SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))" - echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" - sleep $SLEEP_TIME_ fi # now run screen with config -- 2.1.4