提交 1341a75a authored 作者: Anthony Minessale's avatar Anthony Minessale

fix race with media bug exiting from write frame while read frame is trying to use it

上级 04bb74fc
...@@ -318,11 +318,24 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi ...@@ -318,11 +318,24 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi
switch_codec_t *use_codec = read_frame->codec; switch_codec_t *use_codec = read_frame->codec;
if (do_bugs) { if (do_bugs) {
switch_thread_rwlock_wrlock(session->bug_rwlock); switch_thread_rwlock_wrlock(session->bug_rwlock);
if (!session->bugs) {
do_bugs = 0;
switch_thread_rwlock_unlock(session->bug_rwlock);
goto done;
}
if (!switch_core_codec_ready(&session->bug_codec)) { if (!switch_core_codec_ready(&session->bug_codec)) {
switch_core_codec_copy(read_frame->codec, &session->bug_codec, NULL); switch_core_codec_copy(read_frame->codec, &session->bug_codec, NULL);
} }
use_codec = &session->bug_codec; use_codec = &session->bug_codec;
switch_thread_rwlock_unlock(session->bug_rwlock); switch_thread_rwlock_unlock(session->bug_rwlock);
switch_thread_rwlock_wrlock(session->bug_rwlock);
if (!session->bugs) {
do_bugs = 0;
}
switch_thread_rwlock_unlock(session->bug_rwlock);
if (!do_bugs) goto done;
} }
if (switch_test_flag(read_frame, SFF_PLC)) { if (switch_test_flag(read_frame, SFF_PLC)) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论