@@ -51,7 +51,6 @@ type WslConn struct {
51
51
HasWaiter * atomic.Bool
52
52
LastConnectTime int64
53
53
ActiveConnNum int
54
- Context context.Context
55
54
cancelFn func ()
56
55
}
57
56
@@ -188,6 +187,8 @@ func (conn *WslConn) OpenDomainSocketListener() error {
188
187
}
189
188
190
189
func (conn * WslConn ) StartConnServer () error {
190
+ utilCtx , cancelFn := context .WithTimeout (context .Background (), 5 * time .Second )
191
+ defer cancelFn ()
191
192
var allowed bool
192
193
conn .WithLock (func () {
193
194
if conn .Status != Status_Connecting {
@@ -200,7 +201,7 @@ func (conn *WslConn) StartConnServer() error {
200
201
return fmt .Errorf ("cannot start conn server for %q when status is %q" , conn .GetName (), conn .GetStatus ())
201
202
}
202
203
client := conn .GetClient ()
203
- wshPath := GetWshPath (conn . Context , client )
204
+ wshPath := GetWshPath (utilCtx , client )
204
205
rpcCtx := wshrpc.RpcContext {
205
206
ClientType : wshrpc .ClientType_ConnServer ,
206
207
Conn : conn .GetName (),
@@ -210,7 +211,7 @@ func (conn *WslConn) StartConnServer() error {
210
211
if err != nil {
211
212
return fmt .Errorf ("unable to create jwt token for conn controller: %w" , err )
212
213
}
213
- shellPath , err := DetectShell (conn . Context , client )
214
+ shellPath , err := DetectShell (utilCtx , client )
214
215
if err != nil {
215
216
return err
216
217
}
@@ -221,7 +222,14 @@ func (conn *WslConn) StartConnServer() error {
221
222
cmdStr = fmt .Sprintf ("%s=\" %s\" %s connserver --router" , wshutil .WaveJwtTokenVarName , jwtToken , wshPath )
222
223
}
223
224
log .Printf ("starting conn controller: %s\n " , cmdStr )
224
- cmd := client .WslCommand (conn .Context , cmdStr )
225
+ connServerCtx , cancelFn := context .WithCancel (context .Background ())
226
+ conn .WithLock (func () {
227
+ if conn .cancelFn != nil {
228
+ conn .cancelFn ()
229
+ }
230
+ conn .cancelFn = cancelFn
231
+ })
232
+ cmd := client .WslCommand (connServerCtx , cmdStr )
225
233
pipeRead , pipeWrite := io .Pipe ()
226
234
inputPipeRead , inputPipeWrite := io .Pipe ()
227
235
cmd .SetStdout (pipeWrite )
@@ -473,8 +481,7 @@ func getConnInternal(name string) *WslConn {
473
481
connName := WslName {Distro : name }
474
482
rtn := clientControllerMap [name ]
475
483
if rtn == nil {
476
- ctx , cancelFn := context .WithCancel (context .Background ())
477
- rtn = & WslConn {Lock : & sync.Mutex {}, Status : Status_Init , Name : connName , HasWaiter : & atomic.Bool {}, Context : ctx , cancelFn : cancelFn }
484
+ rtn = & WslConn {Lock : & sync.Mutex {}, Status : Status_Init , Name : connName , HasWaiter : & atomic.Bool {}, cancelFn : nil }
478
485
clientControllerMap [name ] = rtn
479
486
}
480
487
return rtn
0 commit comments