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-msgio
Commits
d82125c9
Unverified
Commit
d82125c9
authored
Dec 11, 2017
by
Steven Allen
Committed by
GitHub
Dec 11, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7 from libp2p/feat/fast-close
don't hold the lock when closing
parents
709299bf
3b66fd3b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
65 additions
and
13 deletions
+65
-13
msgio.go
msgio.go
+0
-6
msgio_test.go
msgio_test.go
+50
-1
varint.go
varint.go
+0
-6
varint_test.go
varint_test.go
+15
-0
No files found.
msgio.go
View file @
d82125c9
...
@@ -105,9 +105,6 @@ func (s *writer) WriteMsg(msg []byte) (err error) {
...
@@ -105,9 +105,6 @@ func (s *writer) WriteMsg(msg []byte) (err error) {
}
}
func
(
s
*
writer
)
Close
()
error
{
func
(
s
*
writer
)
Close
()
error
{
s
.
lock
.
Lock
()
defer
s
.
lock
.
Unlock
()
if
c
,
ok
:=
s
.
W
.
(
io
.
Closer
);
ok
{
if
c
,
ok
:=
s
.
W
.
(
io
.
Closer
);
ok
{
return
c
.
Close
()
return
c
.
Close
()
}
}
...
@@ -216,9 +213,6 @@ func (s *reader) ReleaseMsg(msg []byte) {
...
@@ -216,9 +213,6 @@ func (s *reader) ReleaseMsg(msg []byte) {
}
}
func
(
s
*
reader
)
Close
()
error
{
func
(
s
*
reader
)
Close
()
error
{
s
.
lock
.
Lock
()
defer
s
.
lock
.
Unlock
()
if
c
,
ok
:=
s
.
R
.
(
io
.
Closer
);
ok
{
if
c
,
ok
:=
s
.
R
.
(
io
.
Closer
);
ok
{
return
c
.
Close
()
return
c
.
Close
()
}
}
...
...
msgio_test.go
View file @
d82125c9
...
@@ -3,12 +3,13 @@ package msgio
...
@@ -3,12 +3,13 @@ package msgio
import
(
import
(
"bytes"
"bytes"
"fmt"
"fmt"
randbuf
"github.com/jbenet/go-randbuf"
"io"
"io"
"math/rand"
"math/rand"
"sync"
"sync"
"testing"
"testing"
"time"
"time"
randbuf
"github.com/jbenet/go-randbuf"
)
)
func
TestReadWrite
(
t
*
testing
.
T
)
{
func
TestReadWrite
(
t
*
testing
.
T
)
{
...
@@ -32,6 +33,20 @@ func TestReadWriteMsgSync(t *testing.T) {
...
@@ -32,6 +33,20 @@ func TestReadWriteMsgSync(t *testing.T) {
SubtestReadWriteMsgSync
(
t
,
writer
,
reader
)
SubtestReadWriteMsgSync
(
t
,
writer
,
reader
)
}
}
func
TestReadClose
(
t
*
testing
.
T
)
{
r
,
w
:=
io
.
Pipe
()
writer
:=
NewWriter
(
w
)
reader
:=
NewReader
(
r
)
SubtestReadClose
(
t
,
writer
,
reader
)
}
func
TestWriteClose
(
t
*
testing
.
T
)
{
r
,
w
:=
io
.
Pipe
()
writer
:=
NewWriter
(
w
)
reader
:=
NewReader
(
r
)
SubtestWriteClose
(
t
,
writer
,
reader
)
}
func
SubtestReadWrite
(
t
*
testing
.
T
,
writer
WriteCloser
,
reader
ReadCloser
)
{
func
SubtestReadWrite
(
t
*
testing
.
T
,
writer
WriteCloser
,
reader
ReadCloser
)
{
msgs
:=
[
1000
][]
byte
{}
msgs
:=
[
1000
][]
byte
{}
...
@@ -195,3 +210,37 @@ func TestBadSizes(t *testing.T) {
...
@@ -195,3 +210,37 @@ func TestBadSizes(t *testing.T) {
}
}
_
=
msg
_
=
msg
}
}
func
SubtestReadClose
(
t
*
testing
.
T
,
writer
WriteCloser
,
reader
ReadCloser
)
{
defer
writer
.
Close
()
buf
:=
[
10
]
byte
{}
done
:=
make
(
chan
struct
{})
go
func
()
{
defer
close
(
done
)
time
.
Sleep
(
10
*
time
.
Millisecond
)
reader
.
Close
()
}()
n
,
err
:=
reader
.
Read
(
buf
[
:
])
if
n
!=
0
||
err
==
nil
{
t
.
Error
(
"expected to read nothing"
)
}
<-
done
}
func
SubtestWriteClose
(
t
*
testing
.
T
,
writer
WriteCloser
,
reader
ReadCloser
)
{
defer
reader
.
Close
()
buf
:=
[
10
]
byte
{}
done
:=
make
(
chan
struct
{})
go
func
()
{
defer
close
(
done
)
time
.
Sleep
(
10
*
time
.
Millisecond
)
writer
.
Close
()
}()
n
,
err
:=
writer
.
Write
(
buf
[
:
])
if
n
!=
0
||
err
==
nil
{
t
.
Error
(
"expected to read nothing"
)
}
<-
done
}
varint.go
View file @
d82125c9
...
@@ -49,9 +49,6 @@ func (s *varintWriter) WriteMsg(msg []byte) error {
...
@@ -49,9 +49,6 @@ func (s *varintWriter) WriteMsg(msg []byte) error {
}
}
func
(
s
*
varintWriter
)
Close
()
error
{
func
(
s
*
varintWriter
)
Close
()
error
{
s
.
lock
.
Lock
()
defer
s
.
lock
.
Unlock
()
if
c
,
ok
:=
s
.
W
.
(
io
.
Closer
);
ok
{
if
c
,
ok
:=
s
.
W
.
(
io
.
Closer
);
ok
{
return
c
.
Close
()
return
c
.
Close
()
}
}
...
@@ -162,9 +159,6 @@ func (s *varintReader) ReleaseMsg(msg []byte) {
...
@@ -162,9 +159,6 @@ func (s *varintReader) ReleaseMsg(msg []byte) {
}
}
func
(
s
*
varintReader
)
Close
()
error
{
func
(
s
*
varintReader
)
Close
()
error
{
s
.
lock
.
Lock
()
defer
s
.
lock
.
Unlock
()
if
c
,
ok
:=
s
.
R
.
(
io
.
Closer
);
ok
{
if
c
,
ok
:=
s
.
R
.
(
io
.
Closer
);
ok
{
return
c
.
Close
()
return
c
.
Close
()
}
}
...
...
varint_test.go
View file @
d82125c9
...
@@ -3,6 +3,7 @@ package msgio
...
@@ -3,6 +3,7 @@ package msgio
import
(
import
(
"bytes"
"bytes"
"encoding/binary"
"encoding/binary"
"io"
"testing"
"testing"
)
)
...
@@ -64,3 +65,17 @@ func SubtestVarintWrite(t *testing.T, msg []byte) {
...
@@ -64,3 +65,17 @@ func SubtestVarintWrite(t *testing.T, msg []byte) {
t
.
Fatalf
(
"wrote incorrect number of bytes: %d != %d"
,
len
(
bb
),
bblen
)
t
.
Fatalf
(
"wrote incorrect number of bytes: %d != %d"
,
len
(
bb
),
bblen
)
}
}
}
}
func
TestVarintReadClose
(
t
*
testing
.
T
)
{
r
,
w
:=
io
.
Pipe
()
writer
:=
NewVarintWriter
(
w
)
reader
:=
NewVarintReader
(
r
)
SubtestReadClose
(
t
,
writer
,
reader
)
}
func
TestVarintWriteClose
(
t
*
testing
.
T
)
{
r
,
w
:=
io
.
Pipe
()
writer
:=
NewVarintWriter
(
w
)
reader
:=
NewVarintReader
(
r
)
SubtestWriteClose
(
t
,
writer
,
reader
)
}
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