I was looking into the crash reported in ASTERISK-26718 and I have uploaded two changes into gerrit to fix the symptom[1] and hopefully address the cause[2] as well. It would be nice if anyone with a better understanding of stasis and the bridging code can provide feedback.
The crash appears to happen because the stasis control app is unlinked/deleted before the registered after bridge callback is called on the channel which is then following a dangling pointer (use after free). This can happen if imparting the call back to the dial bridge fails. When imparting fails I am now calling ast_bridge_discard_after_callback to cancel the outstanding callback and the crash vanishes. It prints more error messages of having failed to impart the channel but doesn't crash anymore. Having fixed the symptom/crash I tried to understand the cause. The log message already provides a lot of details: WARNING[5290][C-00000a96] bridge.c: Channel PJSIP/ic_proxy_endpoint-00000a95 has a PBX thread and cannot be imparted into bridge 4c35dd9c-4f74-4fdb-af35-261dfd875c04 My attempt is to "park" the pbx in the stasis control. I have placed it the depart_channel function before calling add_to_dial_bridge. This makes the warning disappear (and I didn't hit the assert) in my manual tests. Is this the right fix and the right place to fix it? Should it be moved into add_to_dial_bridge? looking forward to get your feedback holger [1] https://gerrit.asterisk.org/c/asterisk/+/11254 [2] https://gerrit.asterisk.org/c/asterisk/+/11255 -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- asterisk-dev mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev