From fa82c0aa10cfac8c6d5e2446876dc79b2b0c1bf9 Mon Sep 17 00:00:00 2001 From: John Starks Date: Fri, 20 May 2016 10:38:31 -0700 Subject: [PATCH] Windows: work around Go 1.6.2/Nano Server TP5 issue This works around golang/go#15286 by explicitly loading shell32.dll at load time, ensuring that syscall can load it dynamically during process startup. Signed-off-by: John Starks Signed-off-by: Antonio Murdaca --- cmd/docker/docker_windows.go | 13 +++++++++++++ cmd/dockerd/docker_windows.go | 13 +++++++++++++ hack/make.sh | 2 +- hack/make/cross | 7 ------- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/cmd/docker/docker_windows.go b/cmd/docker/docker_windows.go index de32257586..9bc507e20c 100644 --- a/cmd/docker/docker_windows.go +++ b/cmd/docker/docker_windows.go @@ -1,5 +1,18 @@ package main import ( + "sync/atomic" + _ "github.com/docker/docker/autogen/winresources/docker" ) + +//go:cgo_import_dynamic main.dummy CommandLineToArgvW%2 "shell32.dll" + +var dummy uintptr + +func init() { + // Ensure that this import is not removed by the linker. This is used to + // ensure that shell32.dll is loaded by the system loader, preventing + // go#15286 from triggering on Nano Server TP5. + atomic.LoadUintptr(&dummy) +} diff --git a/cmd/dockerd/docker_windows.go b/cmd/dockerd/docker_windows.go index 889e35272d..19c5587cb6 100644 --- a/cmd/dockerd/docker_windows.go +++ b/cmd/dockerd/docker_windows.go @@ -1,5 +1,18 @@ package main import ( + "sync/atomic" + _ "github.com/docker/docker/autogen/winresources/dockerd" ) + +//go:cgo_import_dynamic main.dummy CommandLineToArgvW%2 "shell32.dll" + +var dummy uintptr + +func init() { + // Ensure that this import is not removed by the linker. This is used to + // ensure that shell32.dll is loaded by the system loader, preventing + // go#15286 from triggering on Nano Server TP5. + atomic.LoadUintptr(&dummy) +} diff --git a/hack/make.sh b/hack/make.sh index 3624de0e16..bbe8a9a4df 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -117,7 +117,7 @@ if [ "$AUTO_GOPATH" ]; then if [ "$(go env GOOS)" = 'solaris' ]; then # sys/unix is installed outside the standard library on solaris # TODO need to allow for version change, need to get version from go - export GOPATH="${GOPATH}:/usr/lib/gocode/1.5" + export GOPATH="${GOPATH}:/usr/lib/gocode/1.6.2" fi fi diff --git a/hack/make/cross b/hack/make/cross index dfcd144018..162458a3b1 100644 --- a/hack/make/cross +++ b/hack/make/cross @@ -27,13 +27,6 @@ for platform in $DOCKER_CROSSPLATFORMS; do export GOOS=${platform%/*} export GOARCH=${platform##*/} - # !!! TEMPORARY HACK !!! - # See Dockerfile - if [ "$platform" == "windows/amd64" ]; then - export GOROOT="/usr/local/go${HACK_GO_VERSION}" - export PATH=$(echo "$PATH" | sed "s,:/usr/local/go/bin:,:/usr/local/go${HACK_GO_VERSION}/bin:,") - fi - if [ -z "${daemonSupporting[$platform]}" ]; then # we just need a simple client for these platforms export LDFLAGS_STATIC_DOCKER=""