@@ -173,7 +173,10 @@ srs_error_t SrsCompositeBridge::initialize(SrsRequest* r)
173173{
174174 srs_error_t err = srs_success;
175175
176- for (vector<ISrsStreamBridge*>::iterator it = bridges_.begin (); it != bridges_.end (); ++it) {
176+ // Make a copy of bridges to avoid iterator invalidation if bridges_ is modified during iteration.
177+ // See https://github.com/ossrs/srs/issues/4535
178+ vector<ISrsStreamBridge*> bridges_copy = bridges_;
179+ for (vector<ISrsStreamBridge*>::iterator it = bridges_copy.begin (); it != bridges_copy.end (); ++it) {
177180 ISrsStreamBridge* bridge = *it;
178181 if ((err = bridge->initialize (r)) != srs_success) {
179182 return err;
@@ -187,7 +190,10 @@ srs_error_t SrsCompositeBridge::on_publish()
187190{
188191 srs_error_t err = srs_success;
189192
190- for (vector<ISrsStreamBridge*>::iterator it = bridges_.begin (); it != bridges_.end (); ++it) {
193+ // Make a copy of bridges to avoid iterator invalidation if bridges_ is modified during iteration.
194+ // See https://github.com/ossrs/srs/issues/4535
195+ vector<ISrsStreamBridge*> bridges_copy = bridges_;
196+ for (vector<ISrsStreamBridge*>::iterator it = bridges_copy.begin (); it != bridges_copy.end (); ++it) {
191197 ISrsStreamBridge* bridge = *it;
192198 if ((err = bridge->on_publish ()) != srs_success) {
193199 return err;
@@ -199,7 +205,10 @@ srs_error_t SrsCompositeBridge::on_publish()
199205
200206void SrsCompositeBridge::on_unpublish ()
201207{
202- for (vector<ISrsStreamBridge*>::iterator it = bridges_.begin (); it != bridges_.end (); ++it) {
208+ // Make a copy of bridges to avoid iterator invalidation if bridges_ is modified during iteration.
209+ // See https://github.com/ossrs/srs/issues/4535
210+ vector<ISrsStreamBridge*> bridges_copy = bridges_;
211+ for (vector<ISrsStreamBridge*>::iterator it = bridges_copy.begin (); it != bridges_copy.end (); ++it) {
203212 ISrsStreamBridge* bridge = *it;
204213 bridge->on_unpublish ();
205214 }
0 commit comments