You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/10/09 15:12:05 UTC

[dubbo-getty] 01/01: fix issue 77: process the last package before handle eof error

This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch fix/issue-77
in repository https://gitbox.apache.org/repos/asf/dubbo-getty.git

commit 0afe1497588f673301f248139db3dba6ca3569a4
Author: AlexStocks <al...@foxmail.com>
AuthorDate: Sat Oct 9 23:10:06 2021 +0800

    fix issue 77: process the last package before handle eof error
---
 .vscode/settings.json |  3 +++
 session.go            | 58 ++++++++++++++++++++++++---------------------------
 2 files changed, 30 insertions(+), 31 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..a460645
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+    "go.inferGopath": false
+}
\ No newline at end of file
diff --git a/session.go b/session.go
index 3c4fd03..57af46a 100644
--- a/session.go
+++ b/session.go
@@ -638,38 +638,34 @@ func (s *session) handleTCPPackage() error {
 			}
 			break
 		}
-		if exit {
-			break
-		}
-		if 0 == bufLen {
-			continue // just continue if session can not read no more stream bytes.
-		}
-		pktBuf.Write(buf[:bufLen])
-		for {
-			if pktBuf.Len() <= 0 {
-				break
-			}
-			pkg, pkgLen, err = s.reader.Read(s, pktBuf.Bytes())
-			// for case 3/case 4
-			if err == nil && s.maxMsgLen > 0 && pkgLen > int(s.maxMsgLen) {
-				err = perrors.Errorf("pkgLen %d > session max message len %d", pkgLen, s.maxMsgLen)
-			}
-			// handle case 1
-			if err != nil {
-				log.Warnf("%s, [session.handleTCPPackage] = len{%d}, error:%+v",
-					s.sessionToken(), pkgLen, perrors.WithStack(err))
-				exit = true
-				break
-			}
-			// handle case 2/case 3
-			if pkg == nil {
-				break
+		if 0 != bufLen {
+			pktBuf.Write(buf[:bufLen])
+			for {
+				if pktBuf.Len() <= 0 {
+					break
+				}
+				pkg, pkgLen, err = s.reader.Read(s, pktBuf.Bytes())
+				// for case 3/case 4
+				if err == nil && s.maxMsgLen > 0 && pkgLen > int(s.maxMsgLen) {
+					err = perrors.Errorf("pkgLen %d > session max message len %d", pkgLen, s.maxMsgLen)
+				}
+				// handle case 1
+				if err != nil {
+					log.Warnf("%s, [session.handleTCPPackage] = len{%d}, error:%+v",
+						s.sessionToken(), pkgLen, perrors.WithStack(err))
+					exit = true
+					break
+				}
+				// handle case 2/case 3
+				if pkg == nil {
+					break
+				}
+				// handle case 4
+				s.UpdateActive()
+				s.addTask(pkg)
+				pktBuf.Next(pkgLen)
+				// continue to handle case 5
 			}
-			// handle case 4
-			s.UpdateActive()
-			s.addTask(pkg)
-			pktBuf.Next(pkgLen)
-			// continue to handle case 5
 		}
 		if exit {
 			break