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 <[email protected]>
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

Reply via email to