Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Panic occured on one way data transmission through Client to Client stream #291

Open
ryogrid opened this issue Dec 3, 2023 · 0 comments
Assignees

Comments

@ryogrid
Copy link

ryogrid commented Dec 3, 2023

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
@ryogrid ryogrid changed the title Panic occured on one way data sending through Client to Client stream Panic occured on one way data transmission through Client to Client stream Dec 3, 2023
@enobufs enobufs self-assigned this Jan 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants