Просмотр исходного кода

Merge pull request #723 from mirokuratczyk/ss

Fix race condition
Rod Hynes 1 год назад
Родитель
Сommit
a9e453c7d1
1 измененных файлов с 2 добавлено и 4 удалено
  1. 2 4
      psiphon/server/shadowsocks.go

+ 2 - 4
psiphon/server/shadowsocks.go

@@ -160,6 +160,7 @@ func (conn *ShadowsocksConn) GetMetrics() common.LogFields {
 	return logFields
 }
 
+// Not safe for concurrent use.
 type saltReader struct {
 	net.Conn
 	server *ShadowsocksServer
@@ -173,9 +174,6 @@ func NewSaltReader(conn net.Conn, server *ShadowsocksServer) *saltReader {
 	}
 }
 
-// Note: it is assumed that the underlying transport, net.Conn, is a reliable
-// stream transport, i.e. TCP, therefore it is required that the caller stop
-// calling Read() on an instance of saltReader after an error is returned.
 func (conn *saltReader) Read(b []byte) (int, error) {
 
 	if conn.reader == nil {
@@ -208,7 +206,7 @@ func (conn *saltReader) init() error {
 
 	if isServerSalt || !conn.server.replayCache.Add(keyID, salt) {
 
-		go drainConn(conn)
+		drainConn(conn.Conn)
 
 		var err error
 		if isServerSalt {