Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
p2p
go-yamux
Commits
29a0d6e9
Unverified
Commit
29a0d6e9
authored
Apr 20, 2020
by
Steven Allen
Committed by
GitHub
Apr 20, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #25 from libp2p/fix/recv-deadlock
fix: unlock recvLock in all cases.
parents
9a36404e
dae8a2b1
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
1 deletion
+30
-1
session_test.go
session_test.go
+28
-0
stream.go
stream.go
+2
-1
No files found.
session_test.go
View file @
29a0d6e9
...
@@ -1208,6 +1208,34 @@ func TestSession_sendMsg_Timeout(t *testing.T) {
...
@@ -1208,6 +1208,34 @@ func TestSession_sendMsg_Timeout(t *testing.T) {
}
}
}
}
func
TestWindowOverflow
(
t
*
testing
.
T
)
{
// Ensures:
//
// 1. We don't accept a message that's too big.
// 2. We unlock after resetting the stream.
for
i
:=
uint32
(
1
);
i
<
100
;
i
+=
2
{
func
()
{
client
,
server
:=
testClientServerConfig
(
testConfNoKeepAlive
())
defer
client
.
Close
()
defer
server
.
Close
()
hdr1
:=
encode
(
typeData
,
flagSYN
,
i
,
0
)
_
=
client
.
sendMsg
(
hdr1
,
nil
,
nil
)
s
,
err
:=
server
.
AcceptStream
()
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
msg
:=
make
([]
byte
,
client
.
config
.
MaxStreamWindowSize
*
2
)
hdr2
:=
encode
(
typeData
,
0
,
i
,
uint32
(
len
(
msg
)))
_
=
client
.
sendMsg
(
hdr2
,
msg
,
nil
)
_
,
err
=
ioutil
.
ReadAll
(
s
)
if
err
==
nil
{
t
.
Fatal
(
"expected to read no data"
)
}
}()
}
}
func
TestSession_ConnectionWriteTimeout
(
t
*
testing
.
T
)
{
func
TestSession_ConnectionWriteTimeout
(
t
*
testing
.
T
)
{
client
,
server
:=
testClientServerConfig
(
testConfNoKeepAlive
())
client
,
server
:=
testClientServerConfig
(
testConfNoKeepAlive
())
defer
client
.
Close
()
defer
client
.
Close
()
...
...
stream.go
View file @
29a0d6e9
...
@@ -413,14 +413,15 @@ func (s *Stream) readData(hdr header, flags uint16, conn io.Reader) error {
...
@@ -413,14 +413,15 @@ func (s *Stream) readData(hdr header, flags uint16, conn io.Reader) error {
s
.
recvLock
.
Lock
()
s
.
recvLock
.
Lock
()
if
length
>
s
.
recvWindow
{
if
length
>
s
.
recvWindow
{
s
.
recvLock
.
Unlock
()
s
.
session
.
logger
.
Printf
(
"[ERR] yamux: receive window exceeded (stream: %d, remain: %d, recv: %d)"
,
s
.
id
,
s
.
recvWindow
,
length
)
s
.
session
.
logger
.
Printf
(
"[ERR] yamux: receive window exceeded (stream: %d, remain: %d, recv: %d)"
,
s
.
id
,
s
.
recvWindow
,
length
)
return
ErrRecvWindowExceeded
return
ErrRecvWindowExceeded
}
}
s
.
recvBuf
.
Grow
(
int
(
length
))
s
.
recvBuf
.
Grow
(
int
(
length
))
if
_
,
err
:=
io
.
Copy
(
&
s
.
recvBuf
,
conn
);
err
!=
nil
{
if
_
,
err
:=
io
.
Copy
(
&
s
.
recvBuf
,
conn
);
err
!=
nil
{
s
.
session
.
logger
.
Printf
(
"[ERR] yamux: Failed to read stream data: %v"
,
err
)
s
.
recvLock
.
Unlock
()
s
.
recvLock
.
Unlock
()
s
.
session
.
logger
.
Printf
(
"[ERR] yamux: Failed to read stream data: %v"
,
err
)
return
err
return
err
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment