Browse Source

Stop quic-go timers to immediately release resources

Rod Hynes 6 years ago
parent
commit
1885003867

+ 6 - 0
psiphon/common/quic/gquic-go/receive_stream.go

@@ -153,6 +153,12 @@ func (s *receiveStream) readImpl(p []byte) (bool /*stream completed */, int, err
 			}
 		}
 
+		// [Psiphon]
+		// Stop timer to immediately release resources
+		if deadlineTimer != nil {
+			deadlineTimer.Reset(time.Time{})
+		}
+
 		if bytesRead > len(p) {
 			return false, bytesRead, fmt.Errorf("BUG: bytesRead (%d) > len(p) (%d) in stream.Read", bytesRead, len(p))
 		}

+ 6 - 0
psiphon/common/quic/gquic-go/send_stream.go

@@ -135,6 +135,12 @@ func (s *sendStream) Write(p []byte) (int, error) {
 		s.mutex.Lock()
 	}
 
+	// [Psiphon]
+	// Stop timer to immediately release resources
+	if deadlineTimer != nil {
+		deadlineTimer.Reset(time.Time{})
+	}
+
 	if s.closeForShutdownErr != nil {
 		return bytesWritten, s.closeForShutdownErr
 	} else if s.cancelWriteErr != nil {

+ 4 - 0
psiphon/common/quic/gquic-go/session.go

@@ -545,6 +545,10 @@ runLoop:
 		}
 	}
 
+	// [Psiphon]
+	// Stop timer to immediately release resources
+	s.timer.Reset(time.Time{})
+
 	if err := s.handleCloseError(closeErr); err != nil {
 		s.logger.Infof("Handling close error failed: %s", err)
 	}