From c2fe6634db08902f078093f3ad9c7fa9cf7bb330 Mon Sep 17 00:00:00 2001 From: Gustavo Niemeyer Date: Tue, 7 Feb 2012 00:38:15 -0200 Subject: [PATCH] cmd/dist: prevent race on VERSION creation Commands such as "dist version > VERSION" will cause the shell to create an empty VERSION file and set dist's stdout to its fd. dist in turn looks at VERSION and uses its content if available, which is empty at this point. Fix that by ignoring VERSION if it's empty. Also prevent cmdversion from running findgoversion a second time. It was already loaded by init. R=adg, gustavo, rsc CC=golang-dev https://golang.org/cl/5639044 --- src/cmd/dist/build.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cmd/dist/build.c b/src/cmd/dist/build.c index 54510db1da..d5cf17dcd3 100644 --- a/src/cmd/dist/build.c +++ b/src/cmd/dist/build.c @@ -179,7 +179,12 @@ findgoversion(void) if(isfile(bstr(&path))) { readfile(&b, bstr(&path)); chomp(&b); - goto done; + // Commands such as "dist version > VERSION" will cause + // the shell to create an empty VERSION file and set dist's + // stdout to its fd. dist in turn looks at VERSION and uses + // its content if available, which is empty at this point. + if(b.len > 0) + goto done; } // The $GOROOT/VERSION.cache file is a cache to avoid invoking @@ -1370,5 +1375,5 @@ cmdversion(int argc, char **argv) if(argc > 0) usage(); - xprintf("%s\n", findgoversion()); + xprintf("%s\n", goversion); } -- 2.50.0