TUN-1158: Windows: use process arguments rather than trivial service arguments
TUN-1158: Fix segfault when carrier test case fails
This commit is contained in:
parent
f6014cb2b4
commit
9a48fe959d
|
@ -66,11 +66,16 @@ func TestStartServer(t *testing.T) {
|
||||||
defer ts.Close()
|
defer ts.Close()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
StartServer(logger, listenerAddress, "http://"+ts.Listener.Addr().String(), shutdownC)
|
err := StartServer(logger, listenerAddress, "http://"+ts.Listener.Addr().String(), shutdownC)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Error starting server: %v", err)
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
conn, err := net.Dial("tcp", listenerAddress)
|
conn, err := net.Dial("tcp", listenerAddress)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
|
t.Fatalf("Error connecting to server: %v", err)
|
||||||
|
}
|
||||||
conn.Write([]byte(message))
|
conn.Write([]byte(message))
|
||||||
|
|
||||||
readBuffer := make([]byte, len(message))
|
readBuffer := make([]byte, len(message))
|
||||||
|
|
|
@ -87,7 +87,20 @@ type windowsService struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// called by the package code at the start of the service
|
// called by the package code at the start of the service
|
||||||
func (s *windowsService) Execute(args []string, r <-chan svc.ChangeRequest, statusChan chan<- svc.Status) (ssec bool, errno uint32) {
|
func (s *windowsService) Execute(serviceArgs []string, r <-chan svc.ChangeRequest, statusChan chan<- svc.Status) (ssec bool, errno uint32) {
|
||||||
|
// the arguments passed here are only meaningful if they were manually
|
||||||
|
// specified by the user, e.g. using the Services console or `sc start`.
|
||||||
|
// https://docs.microsoft.com/en-us/windows/desktop/services/service-entry-point
|
||||||
|
// https://stackoverflow.com/a/6235139
|
||||||
|
var args []string
|
||||||
|
if len(serviceArgs) > 1 {
|
||||||
|
args = serviceArgs
|
||||||
|
} else {
|
||||||
|
// fall back to the arguments from ImagePath (or, as sc calls it, binPath)
|
||||||
|
args = os.Args
|
||||||
|
}
|
||||||
|
s.elog.Info(1, fmt.Sprintf("%s service arguments: %v", windowsServiceName, args))
|
||||||
|
|
||||||
const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown
|
const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown
|
||||||
statusChan <- svc.Status{State: svc.StartPending}
|
statusChan <- svc.Status{State: svc.StartPending}
|
||||||
errC := make(chan error)
|
errC := make(chan error)
|
||||||
|
|
Loading…
Reference in New Issue