# mediasoup 3.20.3 released with an important SCTP fix

**URL:** https://mediasoup.discourse.group/t/mediasoup-3-20-3-released-with-an-important-sctp-fix/6977
**Category:** Announcements
**Created:** [June 4, 2026, 5:51pm UTC](https://mediasoup.discourse.group/t/mediasoup-3-20-3-released-with-an-important-sctp-fix/6977 "2026-06-04T17:51:35Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)
#### Post date: [June 4, 2026, 5:51pm UTC](https://mediasoup.discourse.group/t/mediasoup-3-20-3-released-with-an-important-sctp-fix/6977/1 "2026-06-04T17:51:35Z")

</div>

mediasoup 3.20.3 ahs been released with an important SCTP bug fix:

> <https://github.com/versatica/mediasoup/pull/1822>
>
> \# Details
> 
> \- The mediasoup SCTP stack aborts the process under some scenarios …when the SCTP t3-rtx timer expires:
> \`\`\`
> mediasoup:mediasoup:ERROR:Worker (ABORT)
> RTC::SCTP::AssociationListenerDeferrer::OnAssociationStreamBufferedAmountLow() | failed
> assertion this-\>ready: not ready
> \`\`\`
> \- The problem is that timers in \`TransmissionControlBlock\` (t3-rtx, delayed-ack), \`HeartbeatHandler\` and \`StreamResetHandler\` are direct entry points invoked by libuv but, unlike in libwebrtc/dcsctp, which handles all timers through \`DcSctpSocket::HandleTimeout()\` and creates a \`CallbackDeferrer::ScopedDeferrer\` there, these handlers in mediasoup's SCTP stack don't open the deferrer scope. When a SCTP t3-rtx timer expires it ends up invoking a deferred callback (e.g. \`OnAssociationStreamBufferedAmountLow()\` via \`SendBufferedPackets()\`) and triggers a failed assertion on \`this-\>ready\` and aborts the worker.
> \- The fix: Each component owning its own timers now opens an \`AssociationListenerDeferrer::ScopedDeferrer\` at the start of its timer handlers (\`OnT3RtxTimer()\`/\`OnDelayedAckTimer()\`, \`OnIntervalTimer()\`/\`OnTimeoutTimer()\`, \`OnReConfigTimer()\`), just like \`Association\` already does in its \`OnXxxxTimer()\` callbacks. To allow this, the argument and member change from \`AssociationListenerInterface&\` to \`AssociationListenerDeferrer&\`.
> - \_NOTE:\_ \`PacketSender\` and \`RetransmissionQueue\` keep the \`AssociationListenerInterface\` class since they are not entry points.
> - \_NOTE:\_ \`PacketSender\` invokes \`this-\>associationListener.OnAssociationSendData()\`, however such a callback is not deferred so we are good. Similar stuff for \`RetransmissionQueue\`.
> \- Test updated.

Please upgrade ASAP if you rely on SCTP/DataChannels in mediasoup \>= 3.20.0.

Rust crates also updated.

---

<div class="post-metadata">

### Author: ![system](https://global.discourse-cdn.com/free1/uploads/mediasoup/original/2X/b/b318c4d3397e65af9535f79c605b80b9ceb066c8.png) [@system](https://mediasoup.discourse.group/u/system)
#### Post date: [June 6, 2026, 5:52pm UTC](https://mediasoup.discourse.group/t/mediasoup-3-20-3-released-with-an-important-sctp-fix/6977/2 "2026-06-06T17:52:19Z")

</div>

This topic was automatically closed after 2 days. New replies are no longer allowed.
