]> 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)
committerTinet-mucw <mucw@ti-net.com.cn>
Thu, 21 Sep 2023 14:47:47 +0000 (14:47 +0000)
commit3e3c2c833dcb6838a952bd90cddbb748d1a64f01
treeed6a706bd2075b3939503bf5eeda6529e10add53
parentff4b5ed9519ea782e72254883074bb591fb127a1
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
res/res_pjsip_transport_websocket.c