about summary refs log tree commit diff
path: root/tests/gc-concurrent.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gc-concurrent.sh')
-rw-r--r--tests/gc-concurrent.sh39
1 files changed, 26 insertions, 13 deletions
diff --git a/tests/gc-concurrent.sh b/tests/gc-concurrent.sh
index c41475fb6ebd..fd329b457eb9 100644
--- a/tests/gc-concurrent.sh
+++ b/tests/gc-concurrent.sh
@@ -1,21 +1,34 @@
-storeExpr=$($TOP/src/nix-instantiate/nix-instantiate gc-concurrent.nix)
-outPath=$($TOP/src/nix-store/nix-store -q $storeExpr)
+storeExpr1=$($TOP/src/nix-instantiate/nix-instantiate gc-concurrent.nix)
+outPath1=$($TOP/src/nix-store/nix-store -q $storeExpr1)
+
+storeExpr2=$($TOP/src/nix-instantiate/nix-instantiate gc-concurrent2.nix)
+outPath2=$($TOP/src/nix-store/nix-store -q $storeExpr2)
 
 ls -l test-tmp/state/temproots
 
+# Start build #1 in the background.  It starts immediately.
+$TOP/src/nix-store/nix-store -rvv "$storeExpr1" &
+pid1=$!
 
-# Start a build in the background.
-$TOP/src/nix-store/nix-store -rvv "$storeExpr" &
-pid=$!
+# Start build #2 in the background after 3 seconds.
+(sleep 3 && $TOP/src/nix-store/nix-store -rvv "$storeExpr2") &
+pid2=$!
 
-# Run the garbage collector while the build is running.
+# Run the garbage collector while the build is running.  Note: the GC
+# sleeps for *another* 2 seconds after acquiring the GC lock.  This
+# checks whether build #1
 sleep 2
-$NIX_BIN_DIR/nix-collect-garbage -vvvvv
+NIX_DEBUG_GC_WAIT=1 $NIX_BIN_DIR/nix-collect-garbage -vvvvv
+
+# Wait for build #1/#2 to finish.
+echo waiting for pid $pid1 to finish...
+wait $pid1
+echo waiting for pid $pid2 to finish...
+wait $pid2
 
-# Wait for the build to finish.
-echo waiting for pid $pid to finish...
-wait $pid
+# Check that the root of build #1 and its dependencies haven't been
+# deleted.
+cat $outPath1/foobar
+cat $outPath1/input-2/bar
 
-# Check that the root and its dependencies haven't been deleted.
-cat $outPath/foobar
-cat $outPath/input-2/bar
+cat $outPath2/foobar