-
Notifications
You must be signed in to change notification settings - Fork 86
Open
Description
Your environment.
What did you do?
- Establish stream between two processes (both side uses sctp.Client to create Association object)
- Then, data write and read one way (through sctp.Stream object)
What did you expect?
- Data transmission works without problem
What happened?
- Panic occured at reader side
fatal error: sync: Unlock of unlocked RWMutex goroutine 26 [running]: sync.fatal({0x3f34a9?, 0x443940?}) C:/Program Files/Go/src/runtime/panic.go:1061 +0x18 sync.(*RWMutex).Unlock(0xc0001bc468) C:/Program Files/Go/src/sync/rwmutex.go:209 +0x45 sync.(*Cond).Wait(0x443940?) C:/Program Files/Go/src/sync/cond.go:69 +0x77 github.com/pion/sctp.(*Stream).ReadSCTP(0xc0001a6750, {0xc00018fb38, 0x400, 0x400}) C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/stream.go:147 +0xd6 github.com/pion/sctp.(*Stream).Read(...) C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/stream.go:114 main.clientRoutine(0xc00009f000, 0x0?) C:/Data/work/gossip-overlay/main/streamer.go:173 +0x270 created by main.main in goroutine 1 C:/Data/work/gossip-overlay/main/streamer.go:96 +0xa47 goroutine 1 [chan receive]: main.main() C:/Data/work/gossip-overlay/main/streamer.go:99 +0xaa9 goroutine 19 [select]: github.com/weaveworks/mesh.(*localPeer).actorLoop(0xc0000d2280, 0xc0000ce180) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/local_peer.go:156 +0xdd created by github.com/weaveworks/mesh.newLocalPeer in goroutine 1 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/local_peer.go:42 +0x2e5 goroutine 20 [chan receive]: github.com/weaveworks/mesh.(*Peers).actorLoop(0xc0000ca1c0) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/peers.go:353 +0x77 created by github.com/weaveworks/mesh.newPeers in goroutine 1 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/peers.go:74 +0x105 goroutine 21 [select]: github.com/weaveworks/mesh.(*routes).run(0xc0000c0180, 0xc000086120, 0xc000086180) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/routes.go:207 +0xb8 created by github.com/weaveworks/mesh.newRoutes in goroutine 1 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/routes.go:53 +0x287 goroutine 22 [select]: github.com/weaveworks/mesh.(*connectionMaker).queryLoop(0xc0000ca230, 0xc0000ce360) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/connection_maker.go:226 +0xc5 created by github.com/weaveworks/mesh.newConnectionMaker in goroutine 1 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/connection_maker.go:75 +0x205 goroutine 23 [select]: github.com/ryogrid/gossip-overlay/core.(*Peer).loop(0xc00009f000, 0xc0000861e0) C:/Data/work/gossip-overlay/core/peer.go:70 +0x79 created by github.com/ryogrid/gossip-overlay/core.NewPeer in goroutine 1 C:/Data/work/gossip-overlay/core/peer.go:50 +0x32d goroutine 7 [select]: github.com/weaveworks/mesh.(*gossipSender).run(0xc000055fd0?, 0xc000192060, 0xc00001c240, 0xc00001c2a0) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/gossip.go:104 +0xa8 created by github.com/weaveworks/mesh.newGossipSender in goroutine 19 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/gossip.go:97 +0x185 goroutine 25 [chan receive]: main.main.func2() C:/Data/work/gossip-overlay/main/streamer.go:85 +0x73 created by main.main in goroutine 1 C:/Data/work/gossip-overlay/main/streamer.go:82 +0x8e7 goroutine 34 [syscall]: os/signal.signal_recv() C:/Program Files/Go/src/runtime/sigqueue.go:152 +0x29 os/signal.loop() C:/Program Files/Go/src/os/signal/signal_unix.go:23 +0x13 created by os/signal.Notify.func1.1 in goroutine 25 C:/Program Files/Go/src/os/signal/signal.go:151 +0x1f goroutine 27 [sleep]: time.Sleep(0xf4240) C:/Program Files/Go/src/runtime/time.go:195 +0x126 github.com/ryogrid/gossip-overlay/core.(*GossipDataManager).Read(0x4438e0?, 0xc00008c028?, 0x5f08?, 0x1?) C:/Data/work/gossip-overlay/core/gossip_data_manager.go:116 +0x794 github.com/ryogrid/gossip-overlay/core.(*GossipSession).Read(0xc000088ed0, {0xc0001a2000, 0x2000, 0xc0001a0000?}) C:/Data/work/gossip-overlay/core/gossip_session.go:39 +0xc5 github.com/pion/sctp.(*Association).readLoop(0xc0000fe000) C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/association.go:535 +0x14b created by github.com/pion/sctp.(*Association).init in goroutine 26 C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/association.go:345 +0xbe goroutine 28 [runnable]: github.com/ryogrid/gossip-overlay/core.(*GossipDataManager).SendToRemote(0xc00009efc0, 0x2, 0x1, 0x1, {0xc000118280, 0x20, 0x20}) C:/Data/work/gossip-overlay/core/gossip_data_manager.go:199 +0x29f github.com/ryogrid/gossip-overlay/core.(*GossipSession).Write(0xc000088ed0, {0xc000118280, 0x20, 0x20}) C:/Data/work/gossip-overlay/core/gossip_session.go:70 +0x125 github.com/pion/sctp.(*Association).writeLoop(0xc0000fe000) C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/association.go:565 +0x282 created by github.com/pion/sctp.(*Association).init in goroutine 26 C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/association.go:346 +0x105 goroutine 37 [sync.RWMutex.RLock]: sync.runtime_SemacquireRWMutexR(0x1?, 0x2?, 0x0?) C:/Program Files/Go/src/runtime/sema.go:82 +0x25 sync.(*RWMutex).RLock(...) C:/Program Files/Go/src/sync/rwmutex.go:71 github.com/pion/sctp.(*Stream).State(0xc0001a6750) C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/stream.go:464 +0x4c github.com/pion/sctp.(*Stream).WriteSCTP(0xc0001a6750, {0xc000207f7e, 0x2, 0x2}, 0x1?) C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/stream.go:267 +0xb5 github.com/pion/sctp.(*Stream).Write(...) C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/stream.go:257 main.clientRoutine.func1() C:/Data/work/gossip-overlay/main/streamer.go:158 +0x148 created by main.clientRoutine in goroutine 26 C:/Data/work/gossip-overlay/main/streamer.go:155 +0x199 goroutine 5 [IO wait]: internal/poll.runtime_pollWait(0x2937ac33f20, 0x72) C:/Program Files/Go/src/runtime/netpoll.go:343 +0x85 internal/poll.(*pollDesc).wait(0x0?, 0x0?, 0x0) C:/Program Files/Go/src/internal/poll/fd_poll_runtime.go:84 +0x27 internal/poll.execIO(0xc00007c018, 0xc0000f7d10) C:/Program Files/Go/src/internal/poll/fd_windows.go:175 +0xe6 internal/poll.(*FD).acceptOne(0xc00007c000, 0x1d8, {0xc0001cc000?, 0x8?, 0x8?}, 0x411830?) C:/Program Files/Go/src/internal/poll/fd_windows.go:944 +0x67 internal/poll.(*FD).Accept(0xc00007c000, 0xc0000f7ee8) C:/Program Files/Go/src/internal/poll/fd_windows.go:978 +0x1bc net.(*netFD).accept(0xc00007c000) C:/Program Files/Go/src/net/fd_windows.go:166 +0x54 net.(*TCPListener).accept(0xc000050220) C:/Program Files/Go/src/net/tcpsock_posix.go:152 +0x1e net.(*TCPListener).AcceptTCP(0xc000050220) C:/Program Files/Go/src/net/tcpsock.go:302 +0x30 github.com/weaveworks/mesh.(*Router).listenTCP.func1() C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/router.go:115 +0x65 created by github.com/weaveworks/mesh.(*Router).listenTCP in goroutine 24 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/router.go:112 +0x1a6 goroutine 35 [select]: github.com/weaveworks/mesh.(*LocalConnection).actorLoop(0xc0001bc280, 0xc00019a240) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/connection.go:354 +0x1f0 github.com/weaveworks/mesh.(*LocalConnection).run(0xc0001bc280, 0xc000187fd0?, 0x36a345?, 0x0?) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/connection.go:256 +0x8ee created by github.com/weaveworks/mesh.startLocalConnection in goroutine 5 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/connection.go:99 +0x2ab goroutine 6 [select]: github.com/weaveworks/mesh.(*gossipSender).run(0x0?, 0xc000192060, 0xc00001c180, 0xc00001c1e0) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/gossip.go:104 +0xa8 created by github.com/weaveworks/mesh.newGossipSender in goroutine 19 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/gossip.go:97 +0x185 goroutine 8 [IO wait]: internal/poll.runtime_pollWait(0x2937ac33e28, 0x72) C:/Program Files/Go/src/runtime/netpoll.go:343 +0x85 internal/poll.(*pollDesc).wait(0x29cd6a?, 0x54d620?, 0x0) C:/Program Files/Go/src/internal/poll/fd_poll_runtime.go:84 +0x27 internal/poll.execIO(0xc0001ca018, 0x411868) C:/Program Files/Go/src/internal/poll/fd_windows.go:175 +0xe6 internal/poll.(*FD).Read(0xc0001ca000, {0xc00009ca60, 0x4, 0x4}) C:/Program Files/Go/src/internal/poll/fd_windows.go:436 +0x2b1 net.(*netFD).Read(0xc0001ca000, {0xc00009ca60?, 0x3c04c0?, 0xc000299e68?}) C:/Program Files/Go/src/net/fd_posix.go:55 +0x25 net.(*conn).Read(0xc0001ba008, {0xc00009ca60?, 0x2937abb1850?, 0x29375940598?}) C:/Program Files/Go/src/net/net.go:179 +0x45 io.ReadAtLeast({0x2937abb9b38, 0xc0001ba008}, {0xc00009ca60, 0x4, 0x4}, 0x4) C:/Program Files/Go/src/io/io.go:335 +0x90 io.ReadFull(...) C:/Program Files/Go/src/io/io.go:354 github.com/weaveworks/mesh.(*lengthPrefixTCPReceiver).Receive(0xc00008b430) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/protocol_crypto.go:168 +0x52 github.com/weaveworks/mesh.(*LocalConnection).receiveTCP(0xc0001bc280, {0x443ac0, 0xc00008b430}) C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/connection.go:420 +0x4c created by github.com/weaveworks/mesh.(*LocalConnection).run in goroutine 35 C:/Users/ryo/go/pkg/mod/github.com/weaveworks/[email protected]/connection.go:247 +0x8d9 goroutine 32 [select]: github.com/pion/sctp.(*ackTimer).start.func1() C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/ack_timer.go:59 +0x6e created by github.com/pion/sctp.(*ackTimer).start in goroutine 27 C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/ack_timer.go:56 +0xe7 goroutine 50 [select]: github.com/pion/sctp.(*rtxTimer).start.func1() C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/rtx_timer.go:154 +0xc6 created by github.com/pion/sctp.(*rtxTimer).start in goroutine 28 C:/Users/ryo/go/pkg/mod/github.com/pion/[email protected]/rtx_timer.go:147 +0x119
- At this part , sync.Cond object (s.readNotifier) is not collectly used at least
- It seems that bugs are not only avobe part. Problems exist at synchronization impl through s.readNotifier
- On current impl, code I pointed should always panics
Metadata
Metadata
Assignees
Labels
No labels