]> git.ipfire.org Git - thirdparty/asterisk.git/commit
res_pjsip_transport_websocket: Prevent transport from being destroyed before message...
authorTinet-mucw <mucw@ti-net.com.cn>
Wed, 13 Sep 2023 09:12:12 +0000 (17:12 +0800)
committerAsterisk Development Team <asteriskteam@digium.com>
Fri, 12 Jan 2024 18:21:32 +0000 (18:21 +0000)
commit0379e8b5cf79cdf34440039f4c68dbdceb0a5c11
treeafad54a887ae46d5ed72fdabf98bb702240a6612
parenta3c3a9bf8d874cdd984e16a170341e034e1d6228
res_pjsip_transport_websocket: Prevent transport from being destroyed before message finishes.

From the gdb information, ast_websocket_read reads a message successfully,
then transport_read is called in the serializer. During execution of pjsip_transport_down,
ws_session->stream->fd is closed; ast_websocket_read encounters an error and exits the while loop.
After executing transport_shutdown, the transport's reference count becomes 0, causing a crash when sending SIP messages.
This was due to pjsip_transport_dec_ref executing earlier than pjsip_rx_data_clone, leading to this issue.
In websocket_cb executeing pjsip_transport_add_ref, this we now ensure the transport is not destroyed while in the loop.

Resolves: asterisk#299
(cherry picked from commit 3e3c2c833dcb6838a952bd90cddbb748d1a64f01)
res/res_pjsip_transport_websocket.c