|
|
@@ -35,26 +35,26 @@ type session struct {
|
|
|
downlinkClosed bool
|
|
|
}
|
|
|
|
|
|
-func (s *session) checkAndRemove() {
|
|
|
- s.Lock()
|
|
|
- if s.uplinkClosed && s.downlinkClosed {
|
|
|
- s.parent.remove(s.id)
|
|
|
- }
|
|
|
- s.Unlock()
|
|
|
-}
|
|
|
-
|
|
|
func (s *session) closeUplink() {
|
|
|
+ var allDone bool
|
|
|
s.Lock()
|
|
|
s.uplinkClosed = true
|
|
|
+ allDone = s.uplinkClosed && s.downlinkClosed
|
|
|
s.Unlock()
|
|
|
- s.checkAndRemove()
|
|
|
+ if allDone {
|
|
|
+ s.parent.remove(s.id)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func (s *session) closeDownlink() {
|
|
|
+ var allDone bool
|
|
|
s.Lock()
|
|
|
s.downlinkClosed = true
|
|
|
+ allDone = s.uplinkClosed && s.downlinkClosed
|
|
|
s.Unlock()
|
|
|
- s.checkAndRemove()
|
|
|
+ if allDone {
|
|
|
+ s.parent.remove(s.id)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
type ClientManager struct {
|
|
|
@@ -177,7 +177,7 @@ func fetchInput(ctx context.Context, s *session, output buf.Writer) {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
- _, timer := signal.CancelAfterInactivity(ctx, time.Minute*5)
|
|
|
+ _, timer := signal.CancelAfterInactivity(ctx, time.Minute*30)
|
|
|
if err := buf.PipeUntilEOF(timer, s.input, writer); err != nil {
|
|
|
log.Info("Proxyman|Mux|Client: Failed to fetch all input: ", err)
|
|
|
}
|