You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2021/08/21 13:36:17 UTC

[plc4x] branch develop updated: - Simplified the handling of the transports GetNumReadableBytes to be less of a memory leak (Turns out all transports actually don't block here)

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

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 60b0b3e  - Simplified the handling of the transports GetNumReadableBytes to be less of a memory leak (Turns out all transports actually don't block here)
60b0b3e is described below

commit 60b0b3ea799fc88c6318dd74f421d1f347b2766a
Author: cdutz <ch...@c-ware.de>
AuthorDate: Sat Aug 21 15:36:10 2021 +0200

    - Simplified the handling of the transports GetNumReadableBytes to be less of a memory leak (Turns out all transports actually don't block here)
---
 .../plc4go/spi/transports/tcp/Transport.go         | 26 +++++-----------------
 .../plc4go/spi/transports/test/Transport.go        |  1 +
 .../plc4go/spi/transports/udp/Transport.go         | 26 +++++-----------------
 3 files changed, 11 insertions(+), 42 deletions(-)

diff --git a/plc4go/internal/plc4go/spi/transports/tcp/Transport.go b/plc4go/internal/plc4go/spi/transports/tcp/Transport.go
index 7262369..0066e7f 100644
--- a/plc4go/internal/plc4go/spi/transports/tcp/Transport.go
+++ b/plc4go/internal/plc4go/spi/transports/tcp/Transport.go
@@ -21,15 +21,13 @@ package tcp
 
 import (
 	"bufio"
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/transports"
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
 	"net"
 	"net/url"
 	"regexp"
 	"strconv"
-	"time"
-
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/transports"
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"github.com/pkg/errors"
 )
 
 type Transport struct {
@@ -153,22 +151,8 @@ func (m *TransportInstance) GetNumReadableBytes() (uint32, error) {
 	if m.reader == nil {
 		return 0, nil
 	}
-	peekChan := make(chan bool)
-	go func() {
-		_, _ = m.reader.Peek(1)
-		peekChan <- true
-	}()
-	timeout := time.NewTimer(time.Millisecond * 10)
-	select {
-	case <-peekChan:
-		if !timeout.Stop() {
-			<-timeout.C
-		}
-		return uint32(m.reader.Buffered()), nil
-	case <-timeout.C:
-		timeout.Stop()
-		return 0, nil
-	}
+	_, _ = m.reader.Peek(1)
+	return uint32(m.reader.Buffered()), nil
 }
 
 func (m *TransportInstance) PeekReadableBytes(numBytes uint32) ([]uint8, error) {
diff --git a/plc4go/internal/plc4go/spi/transports/test/Transport.go b/plc4go/internal/plc4go/spi/transports/test/Transport.go
index 4f2df24..1b04fd9 100644
--- a/plc4go/internal/plc4go/spi/transports/test/Transport.go
+++ b/plc4go/internal/plc4go/spi/transports/test/Transport.go
@@ -85,6 +85,7 @@ func (m *TransportInstance) Close() error {
 func (m *TransportInstance) IsConnected() bool {
 	return m.connected
 }
+
 func (m *TransportInstance) GetNumReadableBytes() (uint32, error) {
 	readableBytes := len(m.readBuffer)
 	log.Trace().Msgf("return number of readable bytes %d", readableBytes)
diff --git a/plc4go/internal/plc4go/spi/transports/udp/Transport.go b/plc4go/internal/plc4go/spi/transports/udp/Transport.go
index ae46473..d950515 100644
--- a/plc4go/internal/plc4go/spi/transports/udp/Transport.go
+++ b/plc4go/internal/plc4go/spi/transports/udp/Transport.go
@@ -21,15 +21,13 @@ package udp
 
 import (
 	"bufio"
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/transports"
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
 	"net"
 	"net/url"
 	"regexp"
 	"strconv"
-	"time"
-
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/transports"
-	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"github.com/pkg/errors"
 )
 
 type Transport struct {
@@ -182,22 +180,8 @@ func (m *TransportInstance) GetNumReadableBytes() (uint32, error) {
 	if m.reader == nil {
 		return 0, nil
 	}
-	peekChan := make(chan bool)
-	go func() {
-		_, _ = m.reader.Peek(1)
-		peekChan <- true
-	}()
-	timeout := time.NewTimer(time.Millisecond * 10)
-	select {
-	case <-peekChan:
-		if !timeout.Stop() {
-			<-timeout.C
-		}
-		return uint32(m.reader.Buffered()), nil
-	case <-timeout.C:
-		timeout.Stop()
-		return 0, nil
-	}
+	_, _ = m.reader.Peek(1)
+	return uint32(m.reader.Buffered()), nil
 }
 
 func (m *TransportInstance) PeekReadableBytes(numBytes uint32) ([]uint8, error) {