grml-screen: internal state cleanup for racecondition fix
authorMichael Gebetsroither <michael@mgeb.org>
Sun, 7 Nov 2010 08:37:55 +0000 (09:37 +0100)
committerMichael Gebetsroither <michael@mgeb.org>
Mon, 8 Nov 2010 13:43:20 +0000 (14:43 +0100)
usr_bin/grml-screen

index 4a9a33e..55de1c8 100755 (executable)
@@ -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