Fix StreamSession close order to ensure listeners are shut down before base session; add delay for read deadlines to take effect

This commit is contained in:
eyedeekay
2025-10-06 15:10:33 -04:00
parent 79fffdde66
commit 1272402f7e
2 changed files with 12 additions and 7 deletions

2
.gitignore vendored
View File

@@ -47,5 +47,5 @@ review.md
SAMv3.md
testplan.md
err
/*.log
*.log
*.test

View File

@@ -338,16 +338,21 @@ func (s *StreamSession) Close() error {
// which needs the write lock, while BaseSession.Close() can block on network I/O
s.mu.Unlock()
// Close the base session first to unblock any pending reads
if err := s.BaseSession.Close(); err != nil {
logger.WithError(err).Error("Failed to close base session")
// Continue with listener cleanup even if base session close fails
}
// CRITICAL FIX: Close listeners BEFORE closing the base session
// This ensures SetReadDeadline() in closeWithoutUnregister() unblocks any
// pending reads in accept loops before BaseSession.Close() marks session as closed
for _, listener := range listeners {
listener.closeWithoutUnregister()
}
// Brief delay to allow read deadlines to take effect and unblock pending reads
time.Sleep(150 * time.Millisecond)
// Close the base session after listeners are shut down
if err := s.BaseSession.Close(); err != nil {
logger.WithError(err).Error("Failed to close base session")
}
logger.Debug("Successfully closed StreamSession")
return nil
}