Stop member transport first before destroying keying

This commit is contained in:
sauwming 2023-05-05 12:44:11 +08:00
parent d22bede20d
commit a5f304a187
1 changed files with 15 additions and 9 deletions

View File

@ -1398,10 +1398,11 @@ static pj_status_t transport_destroy (pjmedia_transport *tp)
PJ_ASSERT_RETURN(tp, PJ_EINVAL);
/* Close member if configured */
if (srtp->setting.close_member_tp && srtp->member_tp) {
pjmedia_transport_close(srtp->member_tp);
}
/* Since we are about to destroy our keying transports, stop member
* transport first to make sure it no longer process any data and
* potentially pass it to the keying transports.
*/
pjmedia_transport_media_stop(srtp->member_tp);
/* Close all keying. Note that any keying should not be destroyed before
* SRTP transport is destroyed as re-INVITE may initiate new keying method
@ -1410,6 +1411,11 @@ static pj_status_t transport_destroy (pjmedia_transport *tp)
for (i=0; i < srtp->all_keying_cnt; i++)
pjmedia_transport_close(srtp->all_keying[i]);
/* Close member if configured */
if (srtp->setting.close_member_tp && srtp->member_tp) {
pjmedia_transport_close(srtp->member_tp);
}
status = pjmedia_transport_srtp_stop(tp);
/* In case mutex is being acquired by other thread */
@ -1932,17 +1938,17 @@ static pj_status_t transport_media_stop(pjmedia_transport *tp)
srtp->started = PJ_FALSE;
/* Invoke media_stop() of all keying methods */
for (i=0; i < srtp->keying_cnt; ++i) {
pjmedia_transport_media_stop(srtp->keying[i]);
}
/* Invoke media_stop() of member tp */
status = pjmedia_transport_media_stop(srtp->member_tp);
if (status != PJ_SUCCESS)
PJ_PERROR(4, (srtp->pool->obj_name, status,
"SRTP failed stop underlying media transport."));
/* Invoke media_stop() of all keying methods */
for (i=0; i < srtp->keying_cnt; ++i) {
pjmedia_transport_media_stop(srtp->keying[i]);
}
/* Finally, stop SRTP */
return pjmedia_transport_srtp_stop(tp);
}