成都网站优化步骤,中石化建设工程有限公司网站,网站开发 东莞,去除wordpress版本号最近编译了fs 1.10.10-dev也就是 master版本#xff08;2023年7月6日#xff09; 给几个客户升级了一下#xff0c;发现非常不稳定(每天都有几个通道卡在early状态)#xff0c;最近才有空来分析原因。
之前跑的是1.10.8 release 版本#xff0c;从来没出现过这个问题2023年7月6日 给几个客户升级了一下发现非常不稳定(每天都有几个通道卡在early状态)最近才有空来分析原因。
之前跑的是1.10.8 release 版本从来没出现过这个问题我把 1.10.8的代码和1.10.10-dev的代码整体对比了一下整体改变不大其中 switch_core_media_set_codec 函数的修改引擎我的警惕因为这个修改时直接修改了互斥锁 switch_core_session_lock_codec_write(session); switch_core_session_lock_codec_read(session); 的锁定范围。我查看了一下这个提交说明
2023年6月12日 这个提交给合并到到了master
SHA-1: 645b610e7968594910dd2368c511fbc93c1373b7
Merge pull request #2109 from signalwire/switch_core_media_set_codec
[Core] Fix possible deadlock in switch_core_media_set_codec()
晚上 我联系客户 看看有没有卡在early状态的通道刚好有一个把所有线程的调用堆栈 输出来, 还真是卡在 switch_core_media_set_codec 。
#0 0x00007f9dc597a54d in __lll_lock_wait () from /lib64/libpthread.so.0
#1 0x00007f9dc5975eb6 in _L_lock_941 () from /lib64/libpthread.so.0
#2 0x00007f9dc5975daf in pthread_mutex_lock () from /lib64/libpthread.so.0
#3 0x00007f9dc8687759 in fspr_thread_mutex_lock (mutexoptimized out) at locks/unix/thread_mutex.c:92
#4 0x00007f9dc850e895 in switch_mutex_lock (lockoptimized out) at src/switch_apr.c:301
#5 0x00007f9db9c9029c in sofia_receive_message (session0x7f9cf5b4a7c8, msg0x7f9d345ac4d0) at mod_sofia.c:1526
#6 0x00007f9dc853f80b in switch_core_session_perform_receive_message (sessionsessionentry0x7f9cf5b4a7c8, messagemessageentry0x7f9d345ac4d0, filefileentry0x7f9dc86a961d src/switch_core_io.c, funcfuncentry0x7f9dc86a9970 __func__.19414 switch_core_session_read_frame, linelineentry416) at src/switch_core_session.c:930
#7 0x00007f9dc854aa7e in switch_core_session_read_frame (sessionsessionentry0x7f9cf5b4a7c8, frameframeentry0x7f9d345ae568, flagsflagsentry0, stream_idstream_identry0) at src/switch_core_io.c:416
#8 0x00007f9dc8608251 in switch_ivr_sleep (session0x7f9cf5b4a7c8, ms100, syncoptimized out, args0x0) at src/switch_ivr.c:294
#9 0x00007f9daeb4dcc5 in ?? () from /ddt/fs/mod/mod_cti.so
#10 0x00007f9dc8543b5b in switch_core_session_exec (session0x7f9cf5b4a7c8, application_interfaceapplication_interfaceentry0x19077a0, argargentry0x7f9d345aeb40 38981 2000) at src/switch_core_session.c:2964
#11 0x00007f9dc85441ef in switch_core_session_execute_application_get_flags (sessionoptimized out, app0x7f9db140b89b cti_wait_for_answer, arg0x7f9d345aeb40 38981 2000, flagsoptimized out) at src/switch_core_session.c:2824
#12 0x00007f9daeb8eb7e in ?? () from /ddt/fs/mod/mod_cti.so
#13 0x00007f9daeb92619 in ?? () from /ddt/fs/mod/mod_cti.so
#14 0x00007f9dc853c9c5 in switch_core_session_thread_pool_worker (thread0x7f9d45af47a0, objoptimized out) at src/switch_core_session.c:1790
#15 0x00007f9dc868d760 in dummy_worker (opaque0x7f9d45af47a0) at threadproc/unix/thread.c:151
#16 0x00007f9dc5973ea5 in start_thread () from /lib64/libpthread.so.0
#17 0x00007f9dc4fc7b0d in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7f9d2f76b700 (LWP 30595)):#0 0x00007f9dc597a54d in __lll_lock_wait () from /lib64/libpthread.so.0
#1 0x00007f9dc5975eb6 in _L_lock_941 () from /lib64/libpthread.so.0
#2 0x00007f9dc5975daf in pthread_mutex_lock () from /lib64/libpthread.so.0
#3 0x00007f9dc8687759 in fspr_thread_mutex_lock (mutexoptimized out) at locks/unix/thread_mutex.c:92
#4 0x00007f9dc850e895 in switch_mutex_lock (lockoptimized out) at src/switch_apr.c:301
#5 0x00007f9dc852c6ec in switch_core_session_lock_codec_read (sessionoptimized out) at src/switch_core_codec.c:74
#6 0x00007f9dc8561e7c in switch_core_media_set_codec (sessionsessionentry0x7f9cf5b4a7c8, forceforceentry0, codec_flags0) at src/switch_core_media.c:3608
#7 0x00007f9dc856763e in switch_core_media_activate_rtp (session0x7f9cf5b4a7c8) at src/switch_core_media.c:8565
#8 0x00007f9db9cf73de in sofia_media_activate_rtp (tech_pvttech_pvtentry0x7f9cf5b53ff8) at sofia_media.c:58
#9 0x00007f9db9cf745e in sofia_media_tech_media (tech_pvttech_pvtentry0x7f9cf5b53ff8, r_sdpoptimized out, typetypeentrySDP_TYPE_REQUEST) at sofia_media.c:189
#10 0x00007f9db9ccab5a in sofia_handle_sip_i_state (de0x7f9d983bcea0, tags0x7f9d882ae950, sip0x0, sofia_privateoptimized out, nh0x7f9da1db69b0, profile0x1ac35070, nua0x7f9d98040be0, phrase0x7f9d882aece6 Ringing, status183, session0x7f9cf5b4a7c8) at sofia.c:7683
#11 our_sofia_event_callback (eventnua_i_state, statusoptimized out, phrase0x7f9d882aece6 Ringing, nua0x7f9d98040be0, profile0x1ac35070, nh0x7f9da1db69b0, sofia_private0x7f9d1927a640, sip0x0, dedeentry0x7f9d983bcea0, tags0x7f9d882ae950) at sofia.c:1813
#12 0x00007f9db9ccea5b in sofia_process_dispatch_event (dep0x7f9d2f76a2c0) at sofia.c:2253
#13 0x00007f9db9c8ffc9 in sofia_receive_message (session0x7f9cf5b4a7c8, msg0x7f9d2f76aa20) at mod_sofia.c:1347
#14 0x00007f9dc853f6d5 in switch_core_session_perform_receive_message (sessionsessionentry0x7f9cf5b4a7c8, messagemessageentry0x7f9d2f76aa20, filefileentry0x7f9dc86c5e35 src/switch_ivr.c, funcfuncentry0x7f9dc86c6ed0 __func__.19070 switch_ivr_parse_signal_data, linelineentry893) at src/switch_core_session.c:853
#15 0x00007f9dc8604f9c in switch_ivr_parse_signal_data (sessionsessionentry0x7f9cf5b4a7c8, allallentrySWITCH_TRUE, only_session_threadonly_session_threadentrySWITCH_FALSE) at src/switch_ivr.c:893
#16 0x00007f9dc8604fec in switch_ivr_parse_all_signal_data (sessionsessionentry0x7f9cf5b4a7c8) at src/switch_ivr.c:906
#17 0x00007f9dc8605007 in switch_ivr_parse_all_messages (sessionsessionentry0x7f9cf5b4a7c8) at src/switch_ivr.c:852
#18 0x00007f9dc8607b4a in switch_ivr_parse_all_events (sessionsessionentry0x7f9cf5b4a7c8) at src/switch_ivr.c:925
#19 0x00007f9dc8548632 in switch_core_session_run (session0x7f9cf5b4a7c8) at src/switch_core_state_machine.c:710
#20 0x00007f9dc85412ae in switch_core_session_thread (threadoptimized out, obj0x7f9cf5b4a7c8) at src/switch_core_session.c:1726
#21 0x00007f9dc853c9c5 in switch_core_session_thread_pool_worker (thread0x7f9d38410920, objoptimized out) at src/switch_core_session.c:1790
#22 0x00007f9dc868d760 in dummy_worker (opaque0x7f9d38410920) at threadproc/unix/thread.c:151
#23 0x00007f9dc5973ea5 in start_thread () from /lib64/libpthread.so.0
#24 0x00007f9dc4fc7b0d in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7f9dc8db78c0 (LWP 11507)):接下来就是分析代码找出死锁原因了
Thread 2 (Thread 0x7f9d2f76b700 (LWP 30595)): 和线程 Thread 1 (Thread 0x7f9dc8db78c0 (LWP 11507)): 调用堆栈都有 sofia_receive_message 这个函数
具体代码 switch_mutex_lock(tech_pvt-sofia_mutex);if (switch_core_session_in_thread(session)) {de-session session;}sofia_process_dispatch_event(de);switch_mutex_unlock(tech_pvt-sofia_mutex);Thread 2 (Thread 0x7f9d2f76b700 (LWP 30595)): 卡在 switch_mutex_lock(tech_pvt-sofia_mutex);了
Thread 1 (Thread 0x7f9d2f76b700 (LWP 30595)) 成功获取了 tech_pvt-sofia_mutex) 锁定进入了sofia_process_dispatch_event。最后卡在switch_core_media_set_codec函数里面的switch_core_session_lock_codec_write(session)步骤。
通过看 Thread 2 (Thread 0x7f9d2f76b700 (LWP 30595)): 的调用堆栈 函数 switch_core_session_read_frame 里面调用了switch_core_session_perform_receive_message 对应代码 switch_mutex_lock(session-codec_read_mutex);...省略很多代码if (!switch_test_flag(session, SSF_WARN_TRANSCODE)) {switch_core_session_message_t msg { 0 };msg.message_id SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY;switch_core_session_receive_message(session, msg);switch_set_flag(session, SSF_WARN_TRANSCODE);}
switch_mutex_lock(session-codec_read_mutex); 这个锁定和 switch_core_session_lock_codec_write(session) 对应的是一个锁定至此 这个死锁的bug我们就分析出来了。
Merge pull request #2109 from signalwire/switch_core_media_set_codec 这个提交为了解决一个bug,导致了一个更深的bug。
触发的原因是 cti模块有处理早期媒体如果外呼用的是 ignore_early_mediatrue 应该是不会触发这个的bug的。
解决这个bug的方法是 调用 switch_core_session_receive_message 之前先 解锁 switch_mutex_unlock(session-codec_read_mutex)。代码如下。 msg.message_id SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY;switch_mutex_unlock(session-codec_read_mutex);switch_core_session_receive_message(session, msg);switch_mutex_lock(session-codec_read_mutex);switch_set_flag(session, SSF_WARN_TRANSCODE);
文章转载自: http://www.morning.pkrb.cn.gov.cn.pkrb.cn http://www.morning.kpgms.cn.gov.cn.kpgms.cn http://www.morning.mxdiy.com.gov.cn.mxdiy.com http://www.morning.tbcfj.cn.gov.cn.tbcfj.cn http://www.morning.wnnlr.cn.gov.cn.wnnlr.cn http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn http://www.morning.mcndn.cn.gov.cn.mcndn.cn http://www.morning.yrsg.cn.gov.cn.yrsg.cn http://www.morning.ljdd.cn.gov.cn.ljdd.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn http://www.morning.rcgzg.cn.gov.cn.rcgzg.cn http://www.morning.mbpzw.cn.gov.cn.mbpzw.cn http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn http://www.morning.chtnr.cn.gov.cn.chtnr.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.xkqjw.cn.gov.cn.xkqjw.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.zfkxj.cn.gov.cn.zfkxj.cn http://www.morning.qbccg.cn.gov.cn.qbccg.cn http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn http://www.morning.knzmb.cn.gov.cn.knzmb.cn http://www.morning.mspqw.cn.gov.cn.mspqw.cn http://www.morning.npmx.cn.gov.cn.npmx.cn http://www.morning.rlqml.cn.gov.cn.rlqml.cn http://www.morning.bntfy.cn.gov.cn.bntfy.cn http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.qpnb.cn.gov.cn.qpnb.cn http://www.morning.zmlbq.cn.gov.cn.zmlbq.cn http://www.morning.sphft.cn.gov.cn.sphft.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.rggky.cn.gov.cn.rggky.cn http://www.morning.cwyrp.cn.gov.cn.cwyrp.cn http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn http://www.morning.bhdtx.cn.gov.cn.bhdtx.cn http://www.morning.mftdq.cn.gov.cn.mftdq.cn http://www.morning.gtjkh.cn.gov.cn.gtjkh.cn http://www.morning.rszyf.cn.gov.cn.rszyf.cn http://www.morning.hpjpy.cn.gov.cn.hpjpy.cn http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn http://www.morning.tnbsh.cn.gov.cn.tnbsh.cn http://www.morning.wxckm.cn.gov.cn.wxckm.cn http://www.morning.rfrnc.cn.gov.cn.rfrnc.cn http://www.morning.hlfgm.cn.gov.cn.hlfgm.cn http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn http://www.morning.zbkdm.cn.gov.cn.zbkdm.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.easiuse.com.gov.cn.easiuse.com http://www.morning.wmnpm.cn.gov.cn.wmnpm.cn http://www.morning.mjdbd.cn.gov.cn.mjdbd.cn http://www.morning.mlwhd.cn.gov.cn.mlwhd.cn http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.gdpai.com.cn.gov.cn.gdpai.com.cn http://www.morning.qcdhg.cn.gov.cn.qcdhg.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.hybmz.cn.gov.cn.hybmz.cn http://www.morning.slfkt.cn.gov.cn.slfkt.cn http://www.morning.gbxxh.cn.gov.cn.gbxxh.cn http://www.morning.fhwfk.cn.gov.cn.fhwfk.cn http://www.morning.kyjyt.cn.gov.cn.kyjyt.cn http://www.morning.cxryx.cn.gov.cn.cxryx.cn http://www.morning.mlntx.cn.gov.cn.mlntx.cn http://www.morning.qflcb.cn.gov.cn.qflcb.cn http://www.morning.qbjrf.cn.gov.cn.qbjrf.cn http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn http://www.morning.mxptg.cn.gov.cn.mxptg.cn http://www.morning.hqllj.cn.gov.cn.hqllj.cn http://www.morning.rwlnk.cn.gov.cn.rwlnk.cn http://www.morning.kgltb.cn.gov.cn.kgltb.cn http://www.morning.jsljr.cn.gov.cn.jsljr.cn http://www.morning.nfpct.cn.gov.cn.nfpct.cn http://www.morning.qtzwh.cn.gov.cn.qtzwh.cn