fix: prevent race condition when channel is used before being set
All checks were successful
Docker Build and Push / build-and-push (push) Successful in 6m24s

This commit is contained in:
2025-12-08 22:46:10 +07:00
parent cb08bb7673
commit c951c41a9b

View File

@ -71,28 +71,25 @@ func New(conn *ssh.ServerConn, forwardingReq <-chan *ssh.Request, sshChan <-chan
SlugManager: slugManager, SlugManager: slugManager,
} }
go func() { for channel := range sshChan {
go session.Lifecycle.WaitForRunningStatus() ch, reqs, err := channel.Accept()
if err != nil {
for channel := range sshChan { log.Printf("failed to accept channel: %v", err)
ch, reqs, err := channel.Accept() continue
if err != nil {
log.Printf("failed to accept channel: %v", err)
continue
}
session.channelOnce.Do(func() {
session.Lifecycle.SetChannel(ch)
session.Interaction.SetChannel(ch)
session.Lifecycle.SetStatus(types.SETUP)
go session.HandleGlobalRequest(forwardingReq)
})
go session.HandleGlobalRequest(reqs)
} }
if err := session.Lifecycle.Close(); err != nil { session.channelOnce.Do(func() {
log.Printf("failed to close session: %v", err) session.Lifecycle.SetChannel(ch)
} session.Interaction.SetChannel(ch)
}() session.Lifecycle.SetStatus(types.SETUP)
go session.HandleGlobalRequest(forwardingReq)
session.Lifecycle.WaitForRunningStatus()
})
go session.HandleGlobalRequest(reqs)
}
if err := session.Lifecycle.Close(); err != nil {
log.Printf("failed to close session: %v", err)
}
} }
func updateClientSlug(oldSlug, newSlug string) bool { func updateClientSlug(oldSlug, newSlug string) bool {