]> 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-org-access-app[bot] <120671045+asterisk-org-access-app[bot]@users.noreply.github.com>
Thu, 21 Sep 2023 14:47:58 +0000 (14:47 +0000)
commit671eeeca240800b28d1622298ccfd5bf0a138dc5
treeb76300fa56d0d5441ca56d8e5870db567845184c
parente06448353d770c92c7c84164f5a4993ff59ae877
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