Skip to content

Handle rejected RTMP streams on response failure - #3508

Open
wasphin wants to merge 1 commit into
apache:masterfrom
wasphin:fix-rtmp-create-stream-response
Open

Handle rejected RTMP streams on response failure#3508
wasphin wants to merge 1 commit into
apache:masterfrom
wasphin:fix-rtmp-create-stream-response

Conversation

@wasphin

@wasphin wasphin commented Aug 30, 2026

Copy link
Copy Markdown
Member

What problem does this PR solve?

Issue Number: resolve

Problem Summary:

An RTMP service may reject a createStream request by returning a null stream.
If writing the rejection response also fails, the error path accesses the null
stream while attempting to notify its failure callback.

What is changed and the side effects?

Changed:

Only notify the stream failure callback when a stream was created. A rejected
request with a failed response now closes the connection without accessing the
missing stream.

Side effects:

  • Performance effects: None.

  • Breaking backward compatibility: No.


Check List:

Avoid accessing the stream failure callback when NewStream rejects a
createStream request and writing the rejection response also fails.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes a crash in the RTMP server-side createStream handling when the service rejects stream creation (returns null) and the subsequent attempt to write the rejection response fails; the error path previously dereferenced the null stream while notifying failure.

Changes:

  • Guard the stream failure-callback notification so it only runs when a stream was actually created.
  • On response-write failure with no created stream, return failure without touching stream state (allowing the connection to be closed safely).

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines 2714 to 2723
PLOG(WARNING) << socket->remote_side() << '[' << mh.stream_id
<< "] Fail to respond createStream";
// End the stream at server-side.
const bthread_id_t id = stream->_onfail_id;
if (id != INVALID_BTHREAD_ID) {
bthread_id_error(id, 0);
if (stream != nullptr) {
const bthread_id_t id = stream->_onfail_id;
if (id != INVALID_BTHREAD_ID) {
bthread_id_error(id, 0);
}
}
return false;
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

Successfully merging this pull request may close these issues.

2 participants