diff --git a/packer/rpc/client.go b/packer/rpc/client.go index 50d445ef1..8fe5f879e 100644 --- a/packer/rpc/client.go +++ b/packer/rpc/client.go @@ -17,7 +17,7 @@ type Client struct { } func NewClient(rwc io.ReadWriteCloser) (*Client, error) { - result, err := NewClientWithMux(NewMuxConn(rwc), 0) + result, err := NewClientWithMux(NewMuxConn(rwc, 0), 0) if err != nil { return nil, err } diff --git a/packer/rpc/muxconn.go b/packer/rpc/muxconn.go index 7612a83e7..6718abb7c 100644 --- a/packer/rpc/muxconn.go +++ b/packer/rpc/muxconn.go @@ -41,11 +41,12 @@ const ( ) // Create a new MuxConn around any io.ReadWriteCloser. -func NewMuxConn(rwc io.ReadWriteCloser) *MuxConn { +func NewMuxConn(rwc io.ReadWriteCloser, startId uint32) *MuxConn { m := &MuxConn{ rwc: rwc, streams: make(map[uint32]*Stream), doneCh: make(chan struct{}), + curId: startId, } go m.cleaner() @@ -145,7 +146,7 @@ func (m *MuxConn) NextId() uint32 { for { result := m.curId - m.curId++ + m.curId += 2 if _, ok := m.streams[result]; !ok { return result } diff --git a/packer/rpc/muxconn_test.go b/packer/rpc/muxconn_test.go index 446a7ce63..910bf66e1 100644 --- a/packer/rpc/muxconn_test.go +++ b/packer/rpc/muxconn_test.go @@ -33,7 +33,7 @@ func testMux(t *testing.T) (client *MuxConn, server *MuxConn) { t.Fatalf("err: %s", err) } - server = NewMuxConn(conn) + server = NewMuxConn(conn, 1) }() // Client side @@ -41,7 +41,7 @@ func testMux(t *testing.T) (client *MuxConn, server *MuxConn) { if err != nil { t.Fatalf("err: %s", err) } - client = NewMuxConn(conn) + client = NewMuxConn(conn, 0) // Wait for the server <-doneCh @@ -241,7 +241,14 @@ func TestMuxConnNextId(t *testing.T) { a := client.NextId() b := client.NextId() - if a != 0 || b != 1 { + if a != 0 || b != 2 { t.Fatalf("IDs should increment") } + + a = server.NextId() + b = server.NextId() + + if a != 1 || b != 3 { + t.Fatalf("IDs should increment: %d %d", a, b) + } } diff --git a/packer/rpc/server.go b/packer/rpc/server.go index 27ebafc98..462158bf4 100644 --- a/packer/rpc/server.go +++ b/packer/rpc/server.go @@ -36,7 +36,7 @@ type Server struct { // NewServer returns a new Packer RPC server. func NewServer(conn io.ReadWriteCloser) *Server { - result := NewServerWithMux(NewMuxConn(conn), 0) + result := NewServerWithMux(NewMuxConn(conn, 1), 0) result.closeMux = true return result }