Summary: | Падает на завершении видеозвонка | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Sergey Ivanov <zagagyka> | ||||||||||||||||||
Component: | telegram-desktop | Assignee: | Vitaly Lipatov <lav> | ||||||||||||||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||||||||||||||
Severity: | normal | ||||||||||||||||||||
Priority: | P5 | CC: | keremet, lav, mcpain, neurofreak-alt, rider, tatyana, zerg | ||||||||||||||||||
Version: | unstable | ||||||||||||||||||||
Hardware: | x86_64 | ||||||||||||||||||||
OS: | Linux | ||||||||||||||||||||
See Also: | https://bugzilla.altlinux.org/show_bug.cgi?id=43098 | ||||||||||||||||||||
Bug Depends on: | 38834 | ||||||||||||||||||||
Bug Blocks: | |||||||||||||||||||||
Attachments: |
|
Description
Sergey Ivanov
2020-09-08 10:35:57 MSK
Видео имеет шанс появиться, начиная с 2.3.1, в которой начали применять WebRTC собственной сборки под названием tg_owt. Ранее для голоса использовалась ныне устаревшая libtgvoip (основанная на старом урезанном WebRTC) Но пока что-то идёт притирка tg_owt к системе, и сейчас любые звонки с ней падают. Поскольку апстрим считает, что это не его дело, ищу способ тестировать WebRTC независимо, и заодно разобраться, какую помойку из него сделали под руководством Google. https://github.com/telegramdesktop/tdesktop/issues/8555 https://github.com/telegramdesktop/tdesktop/issues/8490 Created attachment 8944 [details]
лог valgrind
valgrind показывает разные неполадки в области WebRTC, надо разбираться...
Created attachment 9023 [details]
telegram-desktop-2.4.5
Created attachment 9024 [details]
Падение в конце видеозвонка без звука
В Сизифе telegram-desktop-2.8.1 проверил, видеозвонок работает. Created attachment 9461 [details]
backtrace
Не работает.
переоткрываю Created attachment 9462 [details]
telegram-crash
Ошибка из вложение 9461 [details] у меня тоже воспроизводится. Причина в том, что при входе в критическую секцию вызывается CritScope::CritScope(const RecursiveCriticalSection* cs) из /usr/src/debug/libowt-tg-4.3.0.5/src/rtc_base/deprecated/recursive_critical_section.cc, а при выходе из нее - CritScope::~CritScope() из /usr/src/debug/libtgvoip-2.4.4/webrtc_dsp/rtc_base/criticalsection.cc. Классы разные, а имена их одинаковые. Вызов конструктора от первого и деструктора от второго приводит к ошибке
Таких одноименных классов между libtg_owt и libtgvoip несколько, поэтому даже если CritScope в libowt-tg переименовать например в RecursiveCritScope, то ошибка возникнет на следующем - PlatformThread. В качестве временного решения можно запустить телеграм вот такой командой, чтобы первыми подгрузились функции из libtg_owt: LD_PRELOAD=/usr/lib64/libtg_owt.so.0.0.0 telegram-desktop Звонок выполнить можно, но после завершения звонка происходит аварийное завершение с ошибкой <jemalloc>: src/jemalloc.c:3555: Failed assertion: "usize == isalloc(tsd_tsdn(tsd), ptr)" (Ответ для keremet на комментарий #10) > Таких одноименных классов между libtg_owt и libtgvoip несколько, поэтому > даже если CritScope в libowt-tg переименовать например в RecursiveCritScope, > то ошибка возникнет на следующем - PlatformThread. В качестве временного > решения можно запустить телеграм вот такой командой, чтобы первыми > подгрузились функции из libtg_owt: LD_PRELOAD=/usr/lib64/libtg_owt.so.0.0.0 > telegram-desktop > > Звонок выполнить можно, но после завершения звонка происходит аварийное > завершение с ошибкой > <jemalloc>: src/jemalloc.c:3555: Failed assertion: "usize == > isalloc(tsd_tsdn(tsd), ptr)" Огромное спасибо за исследование. Я думаю, что попробую собрать без libtgvoip. Она нужна для совместимости с какими-то очень старыми клиентами, которых, надеюсь, не осталось. Жаль что при сборке мы не видим предупреждений об одинаковых функциях. (Ответ для Vitaly Lipatov на комментарий #11) > Жаль что при сборке мы не видим предупреждений об одинаковых функциях. как вариант можно выполнить статическую линковку, и тогда предупреждения появятся Собрал 2.8.1, где наконец выключил старый WebRTC, который порождал эти дубли, и теперь должно быть всё хорошо. Ушло в Сизиф: libtgvoip.git=2.4.4-alt6.f321e7c8 telegram-desktop.git=2.8.11-alt1 Заработало, но при окончании звонка упало. Начинал и прерывал звонок оппонент со смартфона. Падает при принятии звонка. Telegram 2.8.11-alt1 #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49 #1 0x00007fffed1ad538 in __GI_abort () at abort.c:79 #2 0x00007ffff7dc44c8 in rtc::webrtc_checks_impl::FatalLog (file=file@entry=0x7ffff7ecb918 "./webrtc_dsp/rtc_base/criticalsection.cc", line=line@entry=156, message=message@entry=0x7ffff7ecb8c7 "CurrentThreadIsOwner()", fmt=<optimized out>, fmt@entry=0x7ffff7ecab0f) at ./webrtc_dsp/rtc_base/checks.cc:155 #3 0x00007ffff7e16bd6 in rtc::webrtc_checks_impl::LogStreamer<>::Call<>(char const*, int, char const*) (message=0x7ffff7ecb8c7 "CurrentThreadIsOwner()", line=156, file=0x7ffff7ecb918 "./webrtc_dsp/rtc_base/criticalsection.cc") at ./webrtc_dsp/rtc_base/checks.h:192 #4 rtc::webrtc_checks_impl::FatalLogCall<false>::operator&<>(rtc::webrtc_checks_impl::LogStreamer<> const&) (streamer=..., this=<optimized out>) at ./webrtc_dsp/rtc_base/checks.h:271 #5 rtc::CriticalSection::Leave (this=0x7fffa9d28998) at ./webrtc_dsp/rtc_base/criticalsection.cc:156 #6 0x00007ffff7e16bfc in rtc::CritScope::~CritScope (this=<optimized out>, __in_chrg=<optimized out>) at ./webrtc_dsp/rtc_base/criticalsection.cc:206 #7 0x00007ffff733e1a3 in rtc::ThreadManager::AddInternal (this=0x7fffa9d28980, message_queue=<optimized out>) at /usr/src/debug/libowt-tg-4.3.0.5/src/rtc_base/thread.cc:127 #8 0x00007ffff733e428 in rtc::Thread::Thread (this=0x7fffa9dd4380, ss=0x7fffffffbd20, do_init=<optimized out>) at /usr/src/debug/libowt-tg-4.3.0.5/src/rtc_base/thread.cc:398 #9 0x00007ffff733e487 in rtc::Thread::Thread (this=0x7fffa9dd4380, ss=std::unique_ptr<rtc::SocketServer> = {...}, do_init=<optimized out>) at /usr/src/debug/libowt-tg-4.3.0.5/src/rtc_base/thread.cc:403 #10 0x00007ffff733e4f3 in rtc::Thread::Thread (this=<optimized out>, ss=...) at /usr/include/c++/10/bits/unique_ptr.h:172 #11 0x00007ffff733e6c0 in rtc::Thread::Create () at /usr/src/debug/libowt-tg-4.3.0.5/src/rtc_base/thread.cc:734 #12 0x0000555557216b84 in tgcalls::(anonymous namespace)::makeManagerThread () at /usr/src/debug/telegram-desktop-2.8.11/Telegram/ThirdParty/tgcalls/tgcalls/InstanceImpl.cpp:13 #13 tgcalls::(anonymous namespace)::getManagerThread () at /usr/src/debug/telegram-desktop-2.8.11/Telegram/ThirdParty/tgcalls/tgcalls/InstanceImpl.cpp:21 #14 0x00005555572188fc in tgcalls::InstanceImpl::InstanceImpl (this=0x7fffbe6a8120, descriptor=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/ThirdParty/tgcalls/tgcalls/InstanceImpl.cpp:35 #15 0x0000555557219c43 in std::make_unique<tgcalls::InstanceImpl, tgcalls::Descriptor> () at /usr/include/c++/10/bits/unique_ptr.h:962 #16 tgcalls::Meta::RegisterOne<tgcalls::InstanceImpl>()::MetaImpl::construct(tgcalls::Descriptor&&) (this=<optimized out>, descriptor=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/ThirdParty/tgcalls/tgcalls/Instance.h:268 #17 0x0000555557214ffe in tgcalls::Meta::Create (version="3.0.0", descriptor=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/ThirdParty/tgcalls/tgcalls/Instance.cpp:50 #18 0x0000555555f761c4 in Calls::Call::createAndStartController (this=0x7fffbe4a4c00, call=...) at /usr/include/c++/10/bits/allocator.h:182 #19 0x0000555555f770b2 in Calls::Call::startConfirmedCall (this=0x7fffbe4a4c00, call=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/calls/calls_call.cpp:719 #20 0x0000555555f7739f in Calls::Call::handleUpdate (this=0x7fffbe4a4c00, call=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/calls/calls_call.cpp:552 #21 0x0000555555f87ae3 in Calls::Instance::handleCallUpdate (this=0x7fffe5740140, session=..., call=...) at /usr/include/c++/10/bits/unique_ptr.h:173 #22 0x0000555555b4ec14 in Api::Updates::feedUpdateVector (this=0x7fffda050800, updates=..., policy=Api::Updates::SkipUpdatePolicy::SkipNone) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/api/api_updates.cpp:305 #23 0x0000555555b4fec9 in Api::Updates::applyUpdates (this=0x7fffda050800, updates=..., sentMessageRandomId=<optimized out>) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/api/api_updates.cpp:1282 #24 0x0000555555b5132d in operator() (updates=..., __closure=<synthetic pointer>) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/api/api_updates.cpp:224 #25 rpl::details::callable_invoke<Api::Updates::Updates(gsl::not_null<Main::Session*>)::<lambda(const MTPUpdates&)>, tl::boxed<MTPupdates> > (arg=..., method=<synthetic pointer>) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_rpl/rpl/details/callable.h:99 #26 rpl::details::consumer_handlers<tl::boxed<MTPupdates>, rpl::no_error, Api::Updates::Updates(gsl::not_null<Main::Session*>)::<lambda(const MTPUpdates&)>, rpl::details::operator|<tl::boxed<MTPupdates>, rpl::no_error, rpl::details::type_erased_generator<tl::boxed<MTPupdates>, rpl::no_error>, Api::Updates::Updates(gsl::not_null<Main::Session*>)::<lambda(const MTPUpdates&)>, void>::<lambda()>, rpl::details::operator|<tl::boxed<MTPupdates>, rpl::no_error, rpl::details::type_erased_generator<tl::boxed<MTPupdates>, rpl::no_error>, Api::Updates::Updates(gsl::not_null<Main::Session*>)::<lambda(const MTPUpdates&)>, void>::<lambda()> >::put_next(tl::boxed<MTPupdates> &&) (this=<optimized out>, value=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_rpl/rpl/consumer.h:146 #27 0x000055555672bdde in rpl::details::consumer_base<tl::boxed<MTPupdates>, rpl::no_error, rpl::details::type_erased_handlers<tl::boxed<MTPupdates>, rpl::no_error> >::handlers_put_next (value=..., this=0x7fffdb4f1790) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_rpl/rpl/consumer.h:326 #28 rpl::details::consumer_base<tl::boxed<MTPupdates>, rpl::no_error, rpl::details::type_erased_handlers<tl::boxed<MTPupdates>, rpl::no_error> >::put_next (value=..., this=0x7fffdb4f1790) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_rpl/rpl/consumer.h:371 #29 rpl::details::consumer_base<tl::boxed<MTPupdates>, rpl::no_error, rpl::details::type_erased_handlers<tl::boxed<MTPupdates>, rpl::no_error> >::put_next_forward (value=..., this=0x7fffdb4f1790) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_rpl/rpl/consumer.h:274 #30 rpl::event_stream<tl::boxed<MTPupdates>, rpl::no_error>::fire_forward<tl::boxed<MTPupdates> > (this=<optimized out>, value=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_rpl/rpl/event_stream.h:140 #31 0x0000555556724c94 in rpl::event_stream<tl::boxed<MTPupdates>, rpl::no_error>::fire (value=..., this=0x7fffdd10d6d8) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_rpl/rpl/event_stream.h:32 #32 Main::Account::checkForUpdates (this=0x7fffdd10d680, message=...) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/main/main_account.cpp:490 #33 0x0000555556724d54 in operator() (message=..., __closure=0x7fffd9b88470) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/main/main_account.cpp:441 #34 std::__invoke_impl<void, Main::Account::startMtp(std::unique_ptr<MTP::Config>)::<lambda(const MTP::Response&)>&, const MTP::Response&> (__f=...) at /usr/include/c++/10/bits/invoke.h:60 #35 std::__invoke_r<void, Main::Account::startMtp(std::unique_ptr<MTP::Config>)::<lambda(const MTP::Response&)>&, const MTP::Response&> (__fn=...) at /usr/include/c++/10/bits/invoke.h:110 #36 std::_Function_handler<void(const MTP::Response&), Main::Account::startMtp(std::unique_ptr<MTP::Config>)::<lambda(const MTP::Response&)> >::_M_invoke(const std::_Any_data &, const MTP::Response &) (__functor=..., __args#0=...) at /usr/include/c++/10/bits/std_function.h:291 #37 0x000055555685aa49 in MTP::details::Session::tryToReceive (this=0x7fffda3daa20) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/mtproto/session.cpp:563 #38 0x00005555560cb612 in std::function<void ()>::operator()() const (this=0x7fffc2a0a1d8) at /usr/include/c++/10/bits/std_function.h:622 #39 base::unique_function<void ()>::operator()() (this=0x7fffc2a0a1d8) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_base/base/unique_function.h:127 #40 base::InvokeQueuedEvent::invoke (this=0x7fffc2a0a1c0) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/lib_base/base/invoke_queued.h:26 #41 Core::Sandbox::notifyOrInvoke (this=this@entry=0x7fffffffd610, receiver=receiver@entry=0x7fffda3daa20, e=e@entry=0x7fffc2a0a1c0) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/core/sandbox.cpp:531 #42 0x00005555560cb70e in Core::Sandbox::notify (this=0x7fffffffd610, receiver=0x7fffda3daa20, e=0x7fffc2a0a1c0) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/core/sandbox.cpp:550 #43 0x00007fffef1ba75a in QCoreApplication::notifyInternal2 (receiver=0x7fffda3daa20, event=0x7fffc2a0a1c0) at kernel/qcoreapplication.cpp:1063 #44 0x00007fffef1bd6d1 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x7fffe5629100) at kernel/qcoreapplication.cpp:1817 #45 0x00007fffef212cd3 in postEventSourceDispatch (s=0x7fffe56340c0) at kernel/qeventdispatcher_glib.cpp:277 #46 0x00007fffed8b46bb in g_main_dispatch (context=0x7fffe562a6c0) at ../glib/gmain.c:3337 #47 g_main_context_dispatch (context=0x7fffe562a6c0) at ../glib/gmain.c:4055 #48 0x00007fffed8b4968 in g_main_context_iterate (context=context@entry=0x7fffe562a6c0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4131 #49 0x00007fffed8b4a1f in g_main_context_iteration (context=0x7fffe562a6c0, may_block=may_block@entry=1) at ../glib/gmain.c:4196 #50 0x00007fffef212350 in QEventDispatcherGlib::processEvents (this=0x7fffe568ee50, flags=...) at kernel/qeventdispatcher_glib.cpp:423 #51 0x00007fffef1b919b in QEventLoop::exec (this=this@entry=0x7fffffffd350, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69 #52 0x00007fffef1c13d0 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121 #53 0x00007fffef5f4a8c in QGuiApplication::exec () at kernel/qguiapplication.cpp:1860 #54 0x00007fffee814a75 in QApplication::exec () at kernel/qapplication.cpp:2824 #55 0x00005555560ca3b3 in Core::Sandbox::start (this=this@entry=0x7fffffffd610) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/core/sandbox.cpp:157 #56 0x00005555560bc0d1 in Core::Launcher::executeApplication (this=0x7fffffffd5a0) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/core/launcher.cpp:533 #57 0x00005555560bc230 in Core::Launcher::exec (this=0x7fffe56b3120) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/core/launcher.cpp:337 #58 0x0000555555a9d3c5 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/telegram-desktop-2.8.11/Telegram/SourceFiles/main.cpp:12 (Ответ для Олег Соловьев на комментарий #15) > Падает при принятии звонка. Но, у тебя нет камеры. Может быть связано. если падает, то reopened. Created attachment 9571 [details]
crash on 2.9.0
Падает при завершении звонка.
Звонили мне на компьютер с телефона.
На компьютере нет никаких устройств ввода/вывода звука.
Актуально для p10 telegram-desktop-2.9.0-alt1 Во время звонка при нажатии на кнопку "вкл. видео" нет отображения видео с веб-камеры, при нажатии на данную кнопку ничего не происходит. При звонке с ноута на ноут при попытке подключить видео - нет изображения и звука. После завершения звонка происходит аварийное завершение с ошибкой. Логи прикладываю log_telegram_1.txt. В случае сброса входящего звонка вторым абонентом - программа падает с ошибками сегментирования. Логи прикладываю log_telegram_2.txt Created attachment 9572 [details]
log_telegram_1.txt (аварийное завершение с ошибкой)
После завершения звонка происходит аварийное завершение с ошибкой
Created attachment 9573 [details]
log_telegram_2.txt (ошибки сегментирования)
В случае сброса входящего звонка вторым абонентом - программа падает с ошибками сегментирования
telegram-desktop.git=3.0.0-alt1 <jemalloc>: src/jemalloc.c:3555: Failed assertion: "usize == isalloc(tsd_tsdn(tsd), ptr)" #0 0x00007f72f2fd32f1 __GI_raise (libc.so.6 + 0x3d2f1) #1 0x00007f72f2fbc538 __GI_abort (libc.so.6 + 0x26538) #2 0x00007f72f4d0bd6a je_sdallocx_default (libjemalloc.so.2 + 0x12d6a) #3 0x00007f72f4d0c17d je_je_sdallocx_noflags (libjemalloc.so.2 + 0x1317d) #4 0x00007f72f4d6934e _ZdlPvm (libjemalloc.so.2 + 0x7034e) #5 0x000055b0ec13551a _ZN7tgcalls14NetworkManagerD2Ev (telegram-desktop + 0x180251a) #6 0x000055b0ec135956 _ZNSt15_Sp_counted_ptrIPN7tgcalls14NetworkManagerELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv (telegram-desktop + 0x1802956) #7 0x000055b0eaee151a _ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv (telegram-desktop + 0x5ae51a) #8 0x00007f72f77edcce OnMessage (libtg_owt.so.0 + 0x41acce) #9 0x00007f72f77ef731 _ZN3rtc6Thread8DispatchEPNS_7MessageE (libtg_owt.so.0 + 0x41c731) #10 0x00007f72f77ef4f4 _ZN3rtc6Thread15ProcessMessagesEi (libtg_owt.so.0 + 0x41c4f4) #11 0x00007f72f77ef5c4 _ZN3rtc6Thread3RunEv (libtg_owt.so.0 + 0x41c5c4) #12 0x00007f72f81eceae start_thread (libpthread.so.0 + 0x8eae) #13 0x00007f72f309589f __clone (libc.so.6 + 0xff89f) Что интересно, под valgrind не падает :) Почти уверен, что имеет место смешение аллокаторов, но даже так не помогает: $ LD_PRELOAD=/usr/lib64/libjemalloc.so.2 telegram-desktop Ошибка происходит на функции FixedDigitalLevelEstimator::CheckParameterCombination(), находящейся в namespace webrtc и файле /usr/src/debug/libtgvoip-2.4.4/webrtc_dsp/modules/audio_processing/agc2/fixed_digital_level_estimator.cc после того, как эта функция вызывается из конструктора FixedDigitalLevelEstimator::FixedDigitalLevelEstimator(), находящегося тоже в namespace webrtc, но в файле /usr/src/debug/libowt-tg-4.3.0.5/src/modules/audio_processing/agc2/fixed_digital_level_estimator.cc, потому что ожидалось, что будет выполенено обращение к FixedDigitalLevelEstimator::CheckParameterCombination() из файла /usr/src/debug/libowt-tg-4.3.0.5/src/modules/audio_processing/agc2/fixed_digital_level_estimator.cc То есть проблема в том, что libowt-tg-4.3.0.5 и libtgvoip-2.4.4 содержат символы с одинаковыми именами и динамически линкуются в одном приложении. Следует убрать зависимость от libtgvoip как от внешней, так и от находящейся в коде проекте. В результате перестанут работать legacy-звонки, но это не критично. Падает при завершении звонка на operator delete(void *ptr, std::size_t size) из /usr/src/debug/jemalloc-5.2.1/src/jemalloc_cpp.cpp. Предполагаю, проблема в том, что память была выделена через new из /usr/lib64/libstdc++.so.6, потому что после сборки без libjemalloc падения при завершении звонка прекратились. предлагаю вот такие изменения http://git.altlinux.org/tasks/286880/ (In reply to keremet from comment #24) > предлагаю вот такие изменения http://git.altlinux.org/tasks/286880/ Видимо, их нужно и в новую версию, т.к. собрал 3.2.5 и оно у меня только что упало telegram-desktop-3.1.8-alt2 -> sisyphus: Tue Oct 12 2021 Andrey Sokolov <keremet@altlinux> 3.1.8-alt2 - fix crashes on video call (closes: 38897) |