Skip to content

Commit 25b5607

Browse files
committed
fix server startup panics
1 parent a732b60 commit 25b5607

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

internal/rpcapi/stacks_grpc_client.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"fmt"
99
"io"
1010
"log"
11+
"sync"
1112

1213
"github.com/hashicorp/go-plugin"
1314
"github.com/hashicorp/terraform-svchost/disco"
@@ -47,40 +48,50 @@ func (c GRPCStacksClient) registerBrokers(stdout, stderr io.Writer) brokerIDs {
4748
packagesServer := dynrpcserver.NewPackagesStub()
4849
stacksServer := dynrpcserver.NewStacksStub()
4950

50-
var s *grpc.Server
51+
var serverWG sync.WaitGroup
52+
// wait for all 3 servers to start
53+
serverWG.Add(3)
54+
5155
dependenciesServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
52-
s = grpc.NewServer(opts...)
56+
s := grpc.NewServer(opts...)
5357
dependencies.RegisterDependenciesServer(s, dependenciesServer)
5458
dependenciesServer.ActivateRPCServer(newDependenciesServer(handles, c.Services))
5559

60+
serverWG.Done()
5661
return s
5762
}
5863

5964
dependenciesBrokerID := c.Broker.NextId()
6065
go c.Broker.AcceptAndServe(dependenciesBrokerID, dependenciesServerFunc)
6166

6267
packagesServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
63-
s = grpc.NewServer(opts...)
68+
s := grpc.NewServer(opts...)
6469
packages.RegisterPackagesServer(s, packagesServer)
6570
packagesServer.ActivateRPCServer(newPackagesServer(c.Services))
6671

72+
serverWG.Done()
6773
return s
6874
}
6975

7076
packagesBrokerID := c.Broker.NextId()
7177
go c.Broker.AcceptAndServe(packagesBrokerID, packagesServerFunc)
7278

7379
stacksServerFunc := func(opts []grpc.ServerOption) *grpc.Server {
74-
s = grpc.NewServer(opts...)
80+
s := grpc.NewServer(opts...)
7581
stacks.RegisterStacksServer(s, stacksServer)
7682
stacksServer.ActivateRPCServer(newStacksServer(
7783
newStopper(), handles, c.Services, &serviceOpts{experimentsAllowed: true}))
84+
85+
serverWG.Done()
7886
return s
7987
}
8088

8189
stacksBrokerID := c.Broker.NextId()
8290
go c.Broker.AcceptAndServe(stacksBrokerID, stacksServerFunc)
8391

92+
// block till all 3 servers have signaled readiness
93+
serverWG.Wait()
94+
8495
return brokerIDs{
8596
dependenciesBrokerID: dependenciesBrokerID,
8697
packagesBrokerID: packagesBrokerID,

0 commit comments

Comments
 (0)