Commit 3a57e708 authored by Lars Gierth's avatar Lars Gierth Committed by GitHub
Browse files

Merge pull request #211 from libp2p/fix/notify-tests

tests: update test cases to act like go-peerstream 1.7.0
parents 4ff80c19 112866c3
...@@ -11,8 +11,9 @@ import ( ...@@ -11,8 +11,9 @@ import (
) )
func TestNotifications(t *testing.T) { func TestNotifications(t *testing.T) {
const swarmSize = 5
mn, err := FullMeshLinked(context.Background(), 5) mn, err := FullMeshLinked(context.Background(), swarmSize)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -23,7 +24,7 @@ func TestNotifications(t *testing.T) { ...@@ -23,7 +24,7 @@ func TestNotifications(t *testing.T) {
nets := mn.Nets() nets := mn.Nets()
notifiees := make([]*netNotifiee, len(nets)) notifiees := make([]*netNotifiee, len(nets))
for i, pn := range nets { for i, pn := range nets {
n := newNetNotifiee() n := newNetNotifiee(swarmSize)
pn.Notify(n) pn.Notify(n)
notifiees[i] = n notifiees[i] = n
} }
...@@ -193,14 +194,14 @@ type netNotifiee struct { ...@@ -193,14 +194,14 @@ type netNotifiee struct {
closedStream chan inet.Stream closedStream chan inet.Stream
} }
func newNetNotifiee() *netNotifiee { func newNetNotifiee(buffer int) *netNotifiee {
return &netNotifiee{ return &netNotifiee{
listen: make(chan ma.Multiaddr), listen: make(chan ma.Multiaddr, buffer),
listenClose: make(chan ma.Multiaddr), listenClose: make(chan ma.Multiaddr, buffer),
connected: make(chan inet.Conn), connected: make(chan inet.Conn, buffer),
disconnected: make(chan inet.Conn), disconnected: make(chan inet.Conn, buffer),
openedStream: make(chan inet.Stream), openedStream: make(chan inet.Stream, buffer),
closedStream: make(chan inet.Stream), closedStream: make(chan inet.Stream, buffer),
} }
} }
......
...@@ -31,7 +31,7 @@ type peernet struct { ...@@ -31,7 +31,7 @@ type peernet struct {
streamHandler inet.StreamHandler streamHandler inet.StreamHandler
connHandler inet.ConnHandler connHandler inet.ConnHandler
notifmu sync.RWMutex notifmu sync.Mutex
notifs map[inet.Notifiee]struct{} notifs map[inet.Notifiee]struct{}
proc goprocess.Process proc goprocess.Process
...@@ -381,11 +381,17 @@ func (pn *peernet) StopNotify(f inet.Notifiee) { ...@@ -381,11 +381,17 @@ func (pn *peernet) StopNotify(f inet.Notifiee) {
// notifyAll runs the notification function on all Notifiees // notifyAll runs the notification function on all Notifiees
func (pn *peernet) notifyAll(notification func(f inet.Notifiee)) { func (pn *peernet) notifyAll(notification func(f inet.Notifiee)) {
pn.notifmu.RLock() pn.notifmu.Lock()
var wg sync.WaitGroup
for n := range pn.notifs { for n := range pn.notifs {
// make sure we dont block // make sure we dont block
// and they dont block each other. // and they dont block each other.
go notification(n) wg.Add(1)
go func(n inet.Notifiee) {
defer wg.Done()
notification(n)
}(n)
} }
pn.notifmu.RUnlock() wg.Wait()
pn.notifmu.Unlock()
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment