From: Michael Gebetsroither Date: Sun, 7 Nov 2010 08:37:55 +0000 (+0100) Subject: grml-screen: internal state cleanup for racecondition fix X-Git-Tag: v1.4.0~4 X-Git-Url: http://git.grml.org/?p=grml-scripts-core.git;a=commitdiff_plain;h=1614f32fd13d96afaad3bb74b3f51fe18b507265 grml-screen: internal state cleanup for racecondition fix --- diff --git a/usr_bin/grml-screen b/usr_bin/grml-screen index 4a9a33e..55de1c8 100755 --- a/usr_bin/grml-screen +++ b/usr_bin/grml-screen @@ -25,14 +25,15 @@ if [ ! -d "/var/run/screen/S-$USER" ]; then echo $MY_PID_ >$PID_FILE_ PID_FILE_CREATED_="true" break + else + PID_FILE_CREATED_="error" fi sleep 0.25 done fi if [ $PID_FILE_CREATED_ = "true" ]; then - if [ -f $PID_FILE_ ]; then - # FORK BEGIN - ( + # 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 @@ -44,13 +45,16 @@ if [ $PID_FILE_CREATED_ = "true" ]; then rm $PID_FILE_ lockfile-remove $PID_FILE_ 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 + )& + # FORK END +elif [ $PID_FILE_CREATED_ = "error" ]; then + SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))" + echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" + sleep $SLEEP_TIME_ +elif [ $PID_FILE_CREATED_ = "false" ]; then + echo "nothing to do" &>/dev/null +else + echo "grml-screen: internal error - PID_FILE_CREATED_ == \"$PID_FILE_CREATED_\"" fi # now run screen with config