diff --git a/Dockerfile b/Dockerfile index bf86e03..04779c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,5 +20,7 @@ ADD . /gopath/src/github.com/buger/gor/ RUN javac -cp /tmp/commons-io-2.4/commons-io-2.4.jar ./examples/middleware/echo.java +RUN apt-get install graphviz -y + RUN go get -u github.com/golang/lint/golint RUN go get \ No newline at end of file diff --git a/Makefile b/Makefile index 339df03..86b207f 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ drace: docker run -v `pwd`:$(SOURCE_PATH) -t -i --env GORACE="halt_on_error=1" gor go test ./... $(ARGS) -v -race -timeout 15s dtest: - docker run -v `pwd`:$(SOURCE_PATH) -t -i gor go test ./... $(ARGS) -v -timeout 60s + docker run -v `pwd`:$(SOURCE_PATH) -t -i gor go test ./... -timeout 5s $(ARGS) -v dcover: docker run -v `pwd`:$(SOURCE_PATH) -t -i --env GORACE="halt_on_error=1" gor go test $(ARGS) -race -v -timeout 15s -coverprofile=coverage.out diff --git a/raw_socket_listener/listener.go b/raw_socket_listener/listener.go index 4fe232d..a29e722 100644 --- a/raw_socket_listener/listener.go +++ b/raw_socket_listener/listener.go @@ -257,4 +257,4 @@ func (t *Listener) Close() { close(t.quit) t.conn.Close() return -} +} \ No newline at end of file diff --git a/raw_socket_listener/tcp_message.go b/raw_socket_listener/tcp_message.go index cabac1d..d5dacee 100644 --- a/raw_socket_listener/tcp_message.go +++ b/raw_socket_listener/tcp_message.go @@ -46,7 +46,6 @@ func NewTCPMessage(ID string, delChan chan *TCPMessage, Ack uint32, expire *time msg.Start = time.Now().UnixNano() msg.packetsChan = make(chan *TCPPacket) msg.delChan = delChan // used for notifying that message completed or expired - msg.timer = time.NewTimer(0) go msg.listen() @@ -69,6 +68,10 @@ func (t *TCPMessage) listen() { // Timeout notifies message to stop listening, close channel and message ready to be sent func (t *TCPMessage) Timeout() { + if t.timer != nil { + t.timer.Stop() + } + select { // In some cases Timeout can be called multiple times (do not know how yet) // Ensure that we did not close channel 2 times @@ -139,12 +142,14 @@ func (t *TCPMessage) AddPacket(packet *TCPPacket) { t.Timeout() } else { // If more then 1 packet, wait for more, and set expiration - if len(t.packets) == 1 { + if len(t.packets) > 1 { // Every time we receive packet we reset this timer t.timer = time.AfterFunc(*t.expire, t.Timeout) } else { // Reset message timeout timer - t.timer.Reset(*t.expire) + if t.timer != nil { + t.timer.Reset(*t.expire) + } } } }