diff --git a/packer/rpc/communicator.go b/packer/rpc/communicator.go index abf841af8..48c6ea09f 100644 --- a/packer/rpc/communicator.go +++ b/packer/rpc/communicator.go @@ -2,11 +2,12 @@ package rpc import ( "encoding/gob" - "github.com/mitchellh/packer/packer" "io" "log" "net/rpc" "os" + + "github.com/mitchellh/packer/packer" ) // An implementation of packer.Communicator where the communicator is actually @@ -137,14 +138,24 @@ func (c *communicator) UploadDir(dst string, src string, exclude []string) error func (c *communicator) Download(path string, w io.Writer) (err error) { // Serve a single connection and a single copy streamId := c.mux.NextId() - go serveSingleCopy("downloadWriter", c.mux, streamId, w, nil) + + waitServer := make(chan bool) + go func() { + serveSingleCopy("downloadWriter", c.mux, streamId, w, nil) + waitServer <- true + }() args := CommunicatorDownloadArgs{ Path: path, WriterStreamId: streamId, } + // Start sending data to the RPC server err = c.client.Call("Communicator.Download", &args, new(interface{})) + + // Wait for the RPC server to finish receiving the data before we return + <-waitServer + return }