jami-daemon issueshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues2023-08-29T16:47:28Zhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/888Pulse use-after-free2023-08-29T16:47:28ZSébastien BlinPulse use-after-free```
=================================================================
==926351==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c0000a6728 at pc 0x555555aa2313 bp 0x7fffefff78a0 sp 0x7fffefff7890
READ of size 8 at 0x60c0000a6...```
=================================================================
==926351==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c0000a6728 at pc 0x555555aa2313 bp 0x7fffefff78a0 sp 0x7fffefff7890
READ of size 8 at 0x60c0000a6728 thread T5 (threaded-ml)
[1691760278.218|9099|accel.cpp :209 ] -- Starting decoding init for cuda with default device.
[1691760278.218|9099|accel.cpp :209 ] -- Starting decoding init for vaapi with default device.
[1691760278.221|9099|accel.cpp :185 ] Device type vaapi successfully created.
[1691760278.221|9099|accel.cpp :218 ] -- Init passed for vaapi with default device.
[AVHWFramesContext @ 0x60e002153a40] [IMGUTILS @ 0x7fffcd1e4040] Picture size 0x0 is invalid
[1691760278.221|9099|accel.cpp :344 ] Failed to initialize hardware frame context: Invalid argument (-22)
[1691760278.222|9099|accel.cpp :209 ] -- Starting decoding init for vdpau with default device.
[1691760278.222|9099|media_decoder.cpp :548 ] Using H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (h264) decoder for video
[1691760278.222|9099|media_decoder.cpp :559 ] Not using hardware decoding for h264
[New Thread 0x7fffd9388640 (LWP 926606)]
[1691760278.338|9092|media_decoder.cpp :171 ] Using format video4linux2 and resolution 960x540
#0 0x555555aa2312 in std::_Function_base::_M_empty() const /usr/include/c++/11/bits/std_function.h:247
#1 0x555555ff005e in std::function<void (bool)>::operator()(bool) const /usr/include/c++/11/bits/std_function.h:588
#2 0x5555567e6cbb in operator() media/audio/pulseaudio/audiostream.cpp:221
#3 0x5555567e6d60 in _FUN media/audio/pulseaudio/audiostream.cpp:222
#4 0x7ffff73cb76f (/lib/x86_64-linux-gnu/libpulse.so.0+0x2076f)
#5 0x7ffff66d4382 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x40382)
#6 0x7ffff66d55be in pa_pdispatch_run (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x415be)
#7 0x7ffff73bf082 (/lib/x86_64-linux-gnu/libpulse.so.0+0x14082)
#8 0x7ffff66da486 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x46486)
#9 0x7ffff66db1d7 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x471d7)
#10 0x7ffff66db599 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x47599)
#11 0x7ffff66df739 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x4b739)
#12 0x7ffff73d2a72 in pa_mainloop_dispatch (/lib/x86_64-linux-gnu/libpulse.so.0+0x27a72)
#13 0x7ffff73d30c9 in pa_mainloop_iterate (/lib/x86_64-linux-gnu/libpulse.so.0+0x280c9)
#14 0x7ffff73d316f in pa_mainloop_run (/lib/x86_64-linux-gnu/libpulse.so.0+0x2816f)
#15 0x7ffff73e337c (/lib/x86_64-linux-gnu/libpulse.so.0+0x3837c)
#16 0x7ffff66edcb2 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x59cb2)
#17 0x7ffff6094b42 in start_thread nptl/pthread_create.c:442
#18 0x7ffff61269ff (/lib/x86_64-linux-gnu/libc.so.6+0x1269ff)
0x60c0000a6728 is located 104 bytes inside of 120-byte region [0x60c0000a66c0,0x60c0000a6738)
freed by thread T1 here:
#0 0x7ffff74b724f in operator delete(void*, unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:172
#1 0x555556788eec in std::default_delete<jami::AudioStream>::operator()(jami::AudioStream*) const /usr/include/c++/11/bits/unique_ptr.h:85
#2 0x55555678aa79 in std::__uniq_ptr_impl<jami::AudioStream, std::default_delete<jami::AudioStream> >::reset(jami::AudioStream*) (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x1236a79)
#3 0x555556788605 in std::unique_ptr<jami::AudioStream, std::default_delete<jami::AudioStream> >::reset(jami::AudioStream*) (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x1234605)
#4 0x55555677fefc in jami::PulseLayer::stopStream(jami::AudioDeviceType) media/audio/pulseaudio/pulselayer.cpp:482
#5 0x555555b14e0b in jami::AudioDeviceGuard::~AudioDeviceGuard() /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:2234
#6 0x555555b563f7 in std::default_delete<jami::AudioDeviceGuard>::operator()(jami::AudioDeviceGuard*) const /usr/include/c++/11/bits/unique_ptr.h:85
#7 0x555555b42224 in std::unique_ptr<jami::AudioDeviceGuard, std::default_delete<jami::AudioDeviceGuard> >::~unique_ptr() /usr/include/c++/11/bits/unique_ptr.h:361
#8 0x55555667cf22 in jami::AudioInput::~AudioInput() media/audio/audio_input.cpp:69
#9 0x555556498105 in void __gnu_cxx::new_allocator<jami::AudioInput>::destroy<jami::AudioInput>(jami::AudioInput*) /usr/include/c++/11/ext/new_allocator.h:168
#10 0x55555649800a in void std::allocator_traits<std::allocator<jami::AudioInput> >::destroy<jami::AudioInput>(std::allocator<jami::AudioInput>&, jami::AudioInput*) /usr/include/c++/11/bits/alloc_traits.h:535
#11 0x555556497aea in std::_Sp_counted_ptr_inplace<jami::AudioInput, std::allocator<jami::AudioInput>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/include/c++/11/bits/shared_ptr_base.h:528
#12 0x555555aaea2b in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/11/bits/shared_ptr_base.h:168
#13 0x555555aa7001 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/11/bits/shared_ptr_base.h:705
#14 0x555555b3dc03 in std::__shared_ptr<jami::AudioInput, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/11/bits/shared_ptr_base.h:1154
#15 0x555556407fad in std::__shared_ptr<jami::AudioInput, (__gnu_cxx::_Lock_policy)2>::reset() /usr/include/c++/11/bits/shared_ptr_base.h:1272
#16 0x55555668eeda in jami::AudioRtpSession::stop() media/audio/audio_rtp_session.cpp:250
[1691760278.631|9092|accel.cpp :209 ] -- Starting decoding init for cuda with default device.
[1691760278.631|9092|media_decoder.cpp :548 ] Using MJPEG (Motion JPEG) (mjpeg) decoder for video
[1691760278.631|9092|media_decoder.cpp :559 ] Not using hardware decoding for mjpeg
[1691760278.635|9092|video_input.cpp :346 ] created decoder with video params : size=960X536, fps=30.000000 pix=yuvj422p
[1691760278.635|9092|sinkclient.cpp :498 ] [Sink:0x613000005b50] Started - size=960x540, mixer=No
#17 0x5555562c5dc2 in jami::SIPCall::stopAllMedia() sip/sipcall.cpp:2247
#18 0x5555562bb546 in jami::SIPCall::peerHungup() sip/sipcall.cpp:1488
#19 0x555555b12746 in jami::Manager::peerHungupCall(jami::Call&) /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:1970
#20 0x5555562be19c in operator() sip/sipcall.cpp:1646
#21 0x5555562dd01b in operator() manager.h:906
#22 0x5555562ea33d in __invoke_impl<void, jami::runOnMainThread<jami::SIPCall::onClosed()::<lambda()> >(jami::SIPCall::onClosed()::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:61
#23 0x5555562e841d in __invoke_r<void, jami::runOnMainThread<jami::SIPCall::onClosed()::<lambda()> >(jami::SIPCall::onClosed()::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:111
#24 0x5555562e55a8 in _M_invoke /usr/include/c++/11/bits/std_function.h:290
#25 0x555555aa7c6f in std::function<void ()>::operator()() const /usr/include/c++/11/bits/std_function.h:590
#26 0x555555c30039 in jami::ScheduledExecutor::loop() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:145
#27 0x555555c2defb in operator() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:35
#28 0x555555c33061 in __invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:61
#29 0x555555c33024 in __invoke<jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:96
previously allocated by thread T1 here:
#0 0x7ffff74b61e7 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x55555677e7f7 in jami::PulseLayer::createStream(std::unique_ptr<jami::AudioStream, std::default_delete<jami::AudioStream> >&, jami::AudioDeviceType, jami::PaDeviceInfos const&, bool, std::function<void (unsigned long)>&&) media/audio/pulseaudio/pulselayer.cpp:414
#2 0x55555677f7c2 in jami::PulseLayer::startStream(jami::AudioDeviceType) media/audio/pulseaudio/pulselayer.cpp:457
#3 0x555555b14b11 in jami::AudioDeviceGuard::AudioDeviceGuard(jami::Manager&, jami::AudioDeviceType) /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:2225
#4 0x555555b4214b in std::_MakeUniq<jami::AudioDeviceGuard>::__single_object std::make_unique<jami::AudioDeviceGuard, jami::Manager&, jami::AudioDeviceType&>(jami::Manager&, jami::AudioDeviceType&) /usr/include/c++/11/bits/unique_ptr.h:962
#5 0x555555b34049 in jami::Manager::startAudioStream(jami::AudioDeviceType) manager.h:149
#6 0x55555667e85c in jami::AudioInput::initDevice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) media/audio/audio_input.cpp:189
#7 0x555556680e9e in jami::AudioInput::switchInput(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) media/audio/audio_input.cpp:312
#8 0x55555668cce1 in jami::AudioRtpSession::startSender() media/audio/audio_rtp_session.cpp:101
#9 0x55555668e8a1 in jami::AudioRtpSession::start(std::unique_ptr<dhtnet::IceSocket, std::default_delete<dhtnet::IceSocket> >, std::unique_ptr<dhtnet::IceSocket, std::default_delete<dhtnet::IceSocket> >) media/audio/audio_rtp_session.cpp:220
#10 0x5555562c4d05 in jami::SIPCall::startAllMedia() sip/sipcall.cpp:2173
#11 0x5555562cbcb0 in jami::SIPCall::onIceNegoSucceed() sip/sipcall.cpp:2748
#12 0x5555562d6406 in operator() sip/sipcall.cpp:3388
#13 0x5555562e0b13 in operator() manager.h:906
#14 0x5555562eaba1 in __invoke_impl<void, jami::runOnMainThread<jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()> >(jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:61
#15 0x5555562e91cd in __invoke_r<void, jami::runOnMainThread<jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()> >(jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:111
#16 0x5555562e6a6d in _M_invoke /usr/include/c++/11/bits/std_function.h:290
#17 0x555555aa7c6f in std::function<void ()>::operator()() const /usr/include/c++/11/bits/std_function.h:590
#18 0x555555c30039 in jami::ScheduledExecutor::loop() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:145
#19 0x555555c2defb in operator() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:35
#20 0x555555c33061 in __invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:61
#21 0x555555c33024 in __invoke<jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:96
#22 0x555555c32fd1 in _M_invoke<0> /usr/include/c++/11/bits/std_thread.h:259
#23 0x555555c32fa5 in operator() /usr/include/c++/11/bits/std_thread.h:266
#24 0x555555c32f89 in _M_run /usr/include/c++/11/bits/std_thread.h:211
#25 0x7ffff64dc252 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xdc252)
Thread T5 (threaded-ml) created by T0 here:
[1691760278.666|9092|media_recorder.cpp :277 ] [Recorder: 0x6160010e3690] Recorder input #1: v:local
[New Thread 0x7fffce1ea640 (LWP 926607)]
#0 0x7ffff7458685 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:216
#1 0x7ffff66edd63 in pa_thread_new (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x59d63)
Thread T1 created by T0 here:
#0 0x7ffff7458685 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:216
#1 0x7ffff64dc328 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xdc328)
#2 0x555555c2e28b in jami::ScheduledExecutor::ScheduledExecutor(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:30
#3 0x555555afe37e in jami::Manager::ManagerPimpl::ManagerPimpl(jami::Manager&) /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:460
#4 0x555555b026ee in jami::Manager::Manager() /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:738
#5 0x555555b024f1 in jami::Manager::instance() /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:715
#6 0x555555c2b537 in libjami::init(libjami::InitFlag) /home/sblin/Projects/jami-project/client-qt/daemon/src/ring_api.cpp:69
#7 0x555555aa534c in jami::test::IceMediaCandExchangeTest::IceMediaCandExchangeTest() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x55134c)
#8 0x555555acba5d in CppUnit::ConcretTestFixtureFactory<jami::test::IceMediaCandExchangeTest>::makeFixture() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x577a5d)
#9 0x555555aa866f in CppUnit::TestSuiteBuilderContext<jami::test::IceMediaCandExchangeTest>::makeFixture() const (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x55466f)
#10 0x555555aa5dd3 in jami::test::IceMediaCandExchangeTest::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&) (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x551dd3)
#11 0x555555aa62c2 in jami::test::IceMediaCandExchangeTest::suite() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x5522c2)
#12 0x555555acba32 in CppUnit::TestSuiteFactory<jami::test::IceMediaCandExchangeTest>::makeTest() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x577a32)
#13 0x7ffff7f8172e in CppUnit::TestFactoryRegistry::addTestToSuite(CppUnit::TestSuite*) (/lib/x86_64-linux-gnu/libcppunit-1.15.so.1+0x2772e)
SUMMARY: AddressSanitizer: heap-use-after-free /usr/include/c++/11/bits/std_function.h:247 in std::_Function_base::_M_empty() const
Shadow bytes around the buggy address:
0x0c188000cc90: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c188000cca0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
0x0c188000ccb0: fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa fa
0x0c188000ccc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa
0x0c188000ccd0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
=>0x0c188000cce0: fd fd fd fd fd[fd]fd fa fa fa fa fa fa fa fa fa
0x0c188000ccf0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c188000cd00: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
0x0c188000cd10: 00 00 00 00 00 00 05 fa fa fa fa fa fa fa fa fa
0x0c188000cd20: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa
0x0c188000cd30: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==926351==ABORTING
[Thread 0x7fffce1ea640 (LWP 926607) exited]
[Thread 0x7fffd9388640 (LWP 926606) exited]
[Thread 0x7fffcf1ec640 (LWP 926605) exited]
[Thread 0x7fffcd1e8640 (LWP 926603) exited]
[Thread 0x7fffcd9e9640 (LWP 926602) exited]
[Thread 0x7fffcf9ed640 (LWP 926598) exited]
[Thread 0x7fffd01ee640 (LWP 926597) exited]
[Thread 0x7fffd09ef640 (LWP 926596) exited]
[Thread 0x7fffd31f4640 (LWP 926592) exited]
[Thread 0x7fffda38a640 (LWP 926591) exited]
[Thread 0x7ffface46640 (LWP 926582) exited]
[Thread 0x7fffac62f640 (LWP 926581) exited]
[Thread 0x7fffd19f1640 (LWP 926448) exited]
[Thread 0x7fffd21f2640 (LWP 926447) exited]
[Thread 0x7fffd39f5640 (LWP 926444) exited]
[Thread 0x7fffd41f6640 (LWP 926443) exited]
[Thread 0x7fffd49f7640 (LWP 926441) exited]
[Thread 0x7fffd51f8640 (LWP 926440) exited]
[Thread 0x7fffd59f9640 (LWP 926439) exited]
[Thread 0x7fffd7348640 (LWP 926438) exited]
[Thread 0x7fffd9b89640 (LWP 926403) exited]
[Thread 0x7fffd6b31640 (LWP 926402) exited]
[Thread 0x7fffd8b87640 (LWP 926374) exited]
[Thread 0x7fffdab8b640 (LWP 926369) exited]
[Thread 0x7fffdb38c640 (LWP 926368) exited]
[Thread 0x7fffdbb8d640 (LWP 926367) exited]
[Thread 0x7fffdc38e640 (LWP 926366) exited]
[Thread 0x7fffdcff5640 (LWP 926365) exited]
[Thread 0x7fffdd7f6640 (LWP 926364) exited]
[Thread 0x7fffddff7640 (LWP 926363) exited]
[Thread 0x7fffde7f8640 (LWP 926362) exited]
[Thread 0x7fffdeff9640 (LWP 926361) exited]
[Thread 0x7fffefffb640 (LWP 926359) exited]
[Thread 0x7ffff07fc640 (LWP 926358) exited]
[Thread 0x7ffff0ffd640 (LWP 926357) exited]
[Thread 0x7ffff17fe640 (LWP 926356) exited]
[Thread 0x7ffff1fff640 (LWP 926354) exited]
[Thread 0x7ffff58064c0 (LWP 926351) exited]
[Thread 0x7fffdf7fa640 (LWP 926604) exited]
[New process 926351]
[Inferior 1 (process 926351) exited with code 01]
(gdb)
```
In
```cpp
auto* op = pa_context_get_source_info_by_name(
context,
name,
[](pa_context* /*c*/, const pa_source_info* i, int /*eol*/, void* userdata) {
AudioStream* thisPtr = (AudioStream*) userdata;
// this whole closure gets called twice by pulse for some reason
// the 2nd time, i is invalid
if (!i) {
// JAMI_ERR("[audiostream] source info not found for %s", realName);
return;
}
// string compare
bool usingEchoCancel = std::string_view(i->driver) == "module-echo-cancel.c";
JAMI_WARN("[audiostream] capture stream using pulse echo cancel module? %s (%s)",
usingEchoCancel ? "yes" : "no",
i->name);
if (!thisPtr) {
JAMI_ERR("[audiostream] AudioStream pointer became invalid during "
"pa_source_info_cb_t callback!");
return;
}
thisPtr->echoCancelCb(usingEchoCancel);
},
this);
```
destruction may occurs between:
```cpp
if (!thisPtr) {
JAMI_ERR("[audiostream] AudioStream pointer became invalid during "
"pa_source_info_cb_t callback!");
return;
}
// HERE
thisPtr->echoCancelCb(usingEchoCancel);
```https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/878CPU rapidly increased during video call when video muted on another side2023-09-08T15:24:55ZKateryna KostiukCPU rapidly increased during video call when video muted on another sidesteps to reproduce:
- Start a video call between A and B.
- Monitor CPU usage on A.
- Mute video on B.
- On A, CPU usage increases and stays high.steps to reproduce:
- Start a video call between A and B.
- Monitor CPU usage on A.
- Mute video on B.
- On A, CPU usage increases and stays high.Adrien BéraudSébastien BlinAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/842FFmpeg 6.0 hevc hardware acceleration NVENC/NVDEC2023-12-29T23:49:35ZAKmatiAKFFmpeg 6.0 hevc hardware acceleration NVENC/NVDECHi, in the new ffmpeg version in order to use hevc hardware acceleration on some nvidia graphic cards -b_ref_mode disabled needs to be passed to ffmpeg. Thread here: https://bbs.archlinux.org/viewtopic.php?id=284290
Also, I suggest to a...Hi, in the new ffmpeg version in order to use hevc hardware acceleration on some nvidia graphic cards -b_ref_mode disabled needs to be passed to ffmpeg. Thread here: https://bbs.archlinux.org/viewtopic.php?id=284290
Also, I suggest to add information about enabling HW accel to get hevc working in enabled codecs settings. I figured it out by accident and for some time wondered why H265 is not listed.Adrien BéraudAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/809AudioRtpSession nullptr exception (seems a multi-thread issue)2023-03-24T18:03:59ZSébastien BlinAudioRtpSession nullptr exception (seems a multi-thread issue)# Scenario
None, it was on a auto-answer device
# Backtrace
```
#0 0x00007fffe8d9ad54 in jami::MediaDecoder::getStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) const
(this=0x0, name="a:remo...# Scenario
None, it was on a auto-answer device
# Backtrace
```
#0 0x00007fffe8d9ad54 in jami::MediaDecoder::getStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) const
(this=0x0, name="a:remote") at media/media_decoder.cpp:832
#1 0x00007fffe8de95a1 in jami::AudioReceiveThread::getInfo() const (this=0x619000be3280) at ./media/audio/audio_receive_thread.cpp:137
#2 0x00007fffe8dece71 in jami::AudioRtpSession::deinitRecorder(std::shared_ptr<jami::MediaRecorder>&)
(this=0x61c000bb4090, rec=std::shared_ptr<jami::MediaRecorder> (use count 1, weak count 1) = {...}) at ./media/audio/audio_rtp_session.cpp:357
#3 0x00007fffe8eced41 in jami::SIPCall::deinitRecorder() (this=0x61a000f6de90) at ./sip/sipcall.cpp:3210
#4 0x00007fffe8ec93be in jami::SIPCall::stopAllMedia() (this=0x61a000f6de90) at ./sip/sipcall.cpp:2221
#5 0x00007fffe8ebfbc0 in operator()(pjsip_transport_state, pjsip_transport_state_info const*) const
(__closure=0x602000346db0, state=PJSIP_TP_STATE_DISCONNECTED) at ./sip/sipcall.cpp:496
#6 0x00007fffe8ed70da in std::__invoke_impl<void, jami::SIPCall::setSipTransport(const std::shared_ptr<jami::SipTransport>&, const std::string&)::<lambda(pjsip_transport_state, const pjsip_transport_state_info*)>&, pjsip_transport_state, const pjsip_transport_state_info*>(std::__invoke_other, struct {...} &)
(__f=...) at /usr/include/c++/12/bits/invoke.h:61
#7 0x00007fffe8ed55b1 in std::__invoke_r<void, jami::SIPCall::setSipTransport(const std::shared_ptr<jami::SipTransport>&, const std::string&)::<lambda(pjsip_transport_state, const pjsip_transport_state_info*)>&, pjsip_transport_state, const pjsip_transport_state_info*>(struct {...} &) (__fn=...)
at /usr/include/c++/12/bits/invoke.h:111
#8 0x00007fffe8ed3c71 in std::_Function_handler<void(pjsip_transport_state, const pjsip_transport_state_info*), jami::SIPCall::setSipTransport(const std::shared_ptr<jami::SipTransport>&, const std::string&)::<lambda(pjsip_transport_state, const pjsip_transport_state_info*)> >::_M_invoke(const std::_Any_data &, pjsip_transport_state &&, const pjsip_transport_state_info *&&)
(__functor=..., __args#0=@0x7fff01d8ded4: PJSIP_TP_STATE_DISCONNECTED, __args#1=@0x7fff01d8dec8: 0x7fff01d8e110)
at /usr/include/c++/12/bits/std_function.h:290
#9 0x00007fffe8efb830 in std::function<void (pjsip_transport_state, pjsip_transport_state_info const*)>::operator()(pjsip_transport_state, pjsip_transport_state_info const*) const (this=0x603000c74800, __args#0=PJSIP_TP_STATE_DISCONNECTED, __args#1=0x7fff01d8e110) at /usr/include/c++/12/bits/std_function.h:591
#10 0x00007fffe8ef853b in jami::SipTransport::stateCallback(pjsip_transport_state, pjsip_transport_state_info const*)
(this=0x611000a27dd0, state=PJSIP_TP_STATE_DISCONNECTED, info=0x7fff01d8e110) at ./sip/siptransport.cpp:155
#11 0x00007fffe8ef8b20 in jami::SipTransportBroker::transportStateChanged(pjsip_transport*, pjsip_transport_state, pjsip_transport_state_info const*)
(this=0x60e00014fa20, tp=0x62501149f170, state=PJSIP_TP_STATE_DISCONNECTED, info=0x7fff01d8e110) at ./sip/siptransport.cpp:243
#12 0x00007fffe8ee9bdc in jami::tp_state_callback(pjsip_transport*, pjsip_transport_state, pjsip_transport_state_info const*)
(tp=0x62501149f170, state=PJSIP_TP_STATE_DISCONNECTED, info=0x7fff01d8e110) at ./sip/sipvoiplink.cpp:587
#13 0x00007fffe8c4178b in operator()() const (__closure=0x61200039fde0) at jamidht/channeled_transport.cpp:190
#14 0x00007fffe8c42c44 in std::__invoke_impl<void, jami::tls::ChanneledSIPTransport::start()::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...)
at /usr/include/c++/12/bits/invoke.h:61
#15 0x00007fffe8c4278c in std::__invoke_r<void, jami::tls::ChanneledSIPTransport::start()::<lambda()>&>(struct {...} &) (__fn=...)
at /usr/include/c++/12/bits/invoke.h:111
#16 0x00007fffe8c422e6 in std::_Function_handler<void(), jami::tls::ChanneledSIPTransport::start()::<lambda()> >::_M_invoke(const std::_Any_data &)
(__functor=...) at /usr/include/c++/12/bits/std_function.h:290
#17 0x00007fffe89c0b70 in std::function<void ()>::operator()() const (this=0x61200039fde0) at /usr/include/c++/12/bits/std_function.h:591
#18 0x00007fffe8b5db5f in jami::ChannelSocket::stop() (this=0x603001bc32c0) at connectivity/multiplexed_socket.cpp:1055
#19 0x00007fffe8b62295 in jami::MultiplexedSocket::Impl::clearSockets() (this=0x61700070ba00) at connectivity/multiplexed_socket.cpp:103
#20 0x00007fffe8b62401 in jami::MultiplexedSocket::Impl::shutdown() (this=0x61700070ba00) at connectivity/multiplexed_socket.cpp:121
#21 0x00007fffe8b5967f in jami::MultiplexedSocket::Impl::eventLoop() (this=0x61700070ba00) at connectivity/multiplexed_socket.cpp:242
#22 0x00007fffe8b61b9f in jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}::operator()() const (__closure=0x602001332118) at connectivity/multiplexed_socket.cpp:68
#23 0x00007fffe8b6f766 in std::__invoke_impl<void, jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}>(std::__invoke_other, jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}&&) (__f=...)
at /usr/include/c++/12/bits/invoke.h:61
#24 0x00007fffe8b6f729 in std::__invoke<jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}>(jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}&&) (__fn=...)
at /usr/include/c++/12/bits/invoke.h:96
#25 0x00007fffe8b6f6d6 in std::thread::_Invoker<std::tuple<jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x602001332118)
at /usr/include/c++/12/bits/std_thread.h:252
#26 0x00007fffe8b6f688 in std::thread::_Invoker<std::tuple<jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}> >::operator()() (this=0x602001332118)
at /usr/include/c++/12/bits/std_thread.h:259
#27 0x00007fffe8b6f632 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<jami::MultiplexedSocket::Impl::Impl(jami::MultiplexedSocket&, dht::Hash<32ul> const&, std::unique_ptr<jami::TlsSocketEndpoint, std::default_delete<jami::TlsSocketEndpoint> >)::{lambda()#1}> > >::_M_run() (this=0x602001332110)
at /usr/include/c++/12/bits/std_thread.h:210
#28 0x00007fffe80dbb03 in execute_native_thread_routine () at /lib64/libstdc++.so.6
#29 0x00007fffe7c8cded in start_thread () at /lib64/libc.so.6
#30 0x00007fffe7d12370 in clone3 () at /lib64/libc.so.6
```
In: `jami::AudioRtpSession::deinitRecorder(std::shared_ptr<jami::MediaRecorder>&)` receiveThread_ is nullptr, so it was de-allocated between line 356/357Aline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/779conference: detached host appearing2023-12-27T18:01:47ZAline Gondim Santosconference: detached host appearingJoin a rdv from two different devices;
Crash one of them (force jami quit without correctly ending the call)
On the other one you will see the host in the place of this crashed participant. If the crashed participant is still there (a ...Join a rdv from two different devices;
Crash one of them (force jami quit without correctly ending the call)
On the other one you will see the host in the place of this crashed participant. If the crashed participant is still there (a frozen component), you can change the layout one or two times and the host will take its place.
Expected: the crashed participant should disappear and the host should not take its place.Aline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/771ut_conference, sporadic crashes in testParticipantAddRmSecondVideo2023-03-31T15:55:27ZSébastien Blinut_conference, sporadic crashes in testParticipantAddRmSecondVideoOn current master (b7dd425660c420466d951f09e3c67e9d5f9eec90), sometimes:
# Stack
```
[1665072641.413|34936|sdp.cpp :606 ] Processing received offer for [Call ID 4153440945198650] with 2 media
malloc_consolidate(): unali...On current master (b7dd425660c420466d951f09e3c67e9d5f9eec90), sometimes:
# Stack
```
[1665072641.413|34936|sdp.cpp :606 ] Processing received offer for [Call ID 4153440945198650] with 2 media
malloc_consolidate(): unaligned fastbin chunk detected
Thread 1 "ut_conference" received signal SIGABRT, Aborted.
0x00007ffff668ec4c in __pthread_kill_implementation () from /lib64/libc.so.6
Missing separate debuginfos, use: dnf debuginfo-install alsa-lib-1.2.7.2-1.fc36.x86_64 bzip2-libs-1.0.8-11.fc36.x86_64 cppunit-1.15.1-6.fc36.x86_64 dbus-libs-1.14.0-1.fc36.x86_64 expat-2.4.7-1.fc36.x86_64 flac-libs-1.3.4-1.fc36.x86_64 glibc-2.35-17.fc36.x86_64 gmp-6.2.1-2.fc36.x86_64 gnutls-3.7.7-1.fc36.x86_64 gsm-1.0.19-7.fc36.x86_64 jsoncpp-1.9.5-2.fc36.x86_64 lame-libs-3.100-12.fc36.x86_64 libX11-1.7.3.1-2.fc36.x86_64 libXau-1.0.9-8.fc36.x86_64 libXext-1.3.4-8.fc36.x86_64 libXfixes-6.0.0-3.fc36.x86_64 libargon2-20171227-9.fc36.x86_64 libasyncns-0.8-22.fc36.x86_64 libcap-2.48-4.fc36.x86_64 libdrm-2.4.110-1.fc36.x86_64 libgcc-12.2.1-2.fc36.x86_64 libgcrypt-1.10.1-3.fc36.x86_64 libgpg-error-1.45-1.fc36.x86_64 libidn2-2.3.3-1.fc36.x86_64 libogg-1.3.5-3.fc36.x86_64 libsndfile-1.1.0-4.fc36.x86_64 libstdc++-12.2.1-2.fc36.x86_64 libtasn1-4.18.0-2.fc36.x86_64 libunistring-1.0-1.fc36.x86_64 libuuid-2.38-1.fc36.x86_64 libva-2.14.0-1.fc36.x86_64 libvdpau-1.5-10.fc36.x86_64 libvorbis-1.3.7-5.fc36.x86_64 libxcb-1.13.1-9.fc36.x86_64 libzstd-1.5.2-2.fc36.x86_64 lz4-libs-1.9.3-4.fc36.x86_64 mpg123-libs-1.30.1-1.fc36.x86_64 nettle-3.8-1.fc36.x86_64 nss-mdns-0.15.1-5.fc36.x86_64 nvidia-driver-cuda-libs-515.76-1.fc36.x86_64 openssl-libs-3.0.5-1.fc36.x86_64 opus-1.3.1-10.fc36.x86_64 p11-kit-0.24.1-2.fc36.x86_64 pulseaudio-libs-15.0-5.fc36.x86_64 speex-1.2.0-10.fc36.x86_64 speexdsp-1.2.1-1.fc36.x86_64 systemd-libs-250.8-1.fc36.x86_64 x264-libs-0.163-6.20210613git5db6aa6.fc36.x86_64 xz-libs-5.2.5-9.fc36.x86_64 yaml-cpp-0.6.3-6.fc36.x86_64 zlib-1.2.11-33.fc36.x86_64
(gdb) bt
#0 0x00007ffff668ec4c in __pthread_kill_implementation () from /lib64/libc.so.6
#1 0x00007ffff663e9c6 in raise () from /lib64/libc.so.6
#2 0x00007ffff66287f4 in abort () from /lib64/libc.so.6
#3 0x00007ffff6682d9e in __libc_message () from /lib64/libc.so.6
#4 0x00007ffff669895c in malloc_printerr () from /lib64/libc.so.6
#5 0x00007ffff669aa8c in _int_free () from /lib64/libc.so.6
#6 0x00007ffff669d103 in free () from /lib64/libc.so.6
#7 0x000000000063b90c in jami::MediaDescription::~MediaDescription (this=0x7fff300212f8, __in_chrg=<optimized out>)
at /home/amarok/Projects/jami/daemon/src/media/media_codec.h:274
#8 0x0000000000906636 in jami::RtpSession::~RtpSession (this=0x7fff300210c0, __in_chrg=<optimized out>)
at ./media/rtp_session.h:51
#9 0x0000000000910ce3 in jami::video::VideoRtpSession::~VideoRtpSession (this=0x7fff300210c0,
__in_chrg=<optimized out>) at ./media/video/video_rtp_session.cpp:79
#10 0x00000000006a8c3a in std::_Destroy<jami::video::VideoRtpSession> (__pointer=0x7fff300210c0)
at /usr/include/c++/12/bits/stl_construct.h:151
#11 0x00000000006a8bde in std::allocator_traits<std::allocator<void> >::destroy<jami::video::VideoRtpSession> (
__p=0x7fff300210c0) at /usr/include/c++/12/bits/alloc_traits.h:648
#12 0x00000000006a8941 in std::_Sp_counted_ptr_inplace<jami::video::VideoRtpSession, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x7fff300210b0) at /usr/include/c++/12/bits/shared_ptr_base.h:613
#13 0x000000000049f957 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use (
this=0x7fff300210b0) at /usr/include/c++/12/bits/shared_ptr_base.h:175
#14 0x000000000049d212 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use_cold (
this=0x7fff300210b0) at /usr/include/c++/12/bits/shared_ptr_base.h:199
#15 0x000000000049a9db in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x7fff300210b0)
at /usr/include/c++/12/bits/shared_ptr_base.h:353
#16 0x000000000049d269 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x1eb9b38,
__in_chrg=<optimized out>) at /usr/include/c++/12/bits/shared_ptr_base.h:1071
#17 0x00000000004cf40a in std::__shared_ptr<jami::RtpSession, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (
this=0x1eb9b30, __in_chrg=<optimized out>) at /usr/include/c++/12/bits/shared_ptr_base.h:1524
#18 0x00000000004e3ef6 in std::shared_ptr<jami::RtpSession>::~shared_ptr (this=0x1eb9b30, __in_chrg=<optimized out>)
at /usr/include/c++/12/bits/shared_ptr.h:175
#19 0x00000000004e3f11 in std::_Destroy<std::shared_ptr<jami::RtpSession> > (__pointer=0x1eb9b30)
at /usr/include/c++/12/bits/stl_construct.h:151
#20 0x00000000004e17a1 in std::_Destroy_aux<false>::__destroy<std::shared_ptr<jami::RtpSession>*> (
__first=0x1eb9b30, __last=0x1eb9b40) at /usr/include/c++/12/bits/stl_construct.h:163
#21 0x00000000004ddade in std::_Destroy<std::shared_ptr<jami::RtpSession>*> (__first=0x1eb9b20, __last=0x1eb9b40)
at /usr/include/c++/12/bits/stl_construct.h:196
#22 0x00000000004d8169 in std::_Destroy<std::shared_ptr<jami::RtpSession>*, std::shared_ptr<jami::RtpSession> > (
__first=0x1eb9b20, __last=0x1eb9b40) at /usr/include/c++/12/bits/alloc_traits.h:850
#23 0x00000000004d2823 in std::vector<std::shared_ptr<jami::RtpSession>, std::allocator<std::shared_ptr<jami::RtpSession> > >::~vector (this=0x7fffffffc3b0, __in_chrg=<optimized out>) at /usr/include/c++/12/bits/stl_vector.h:730
#24 0x000000000068fa7f in jami::SIPCall::exitConference (this=0x1cb4670) at ./sip/sipcall.cpp:3061
#25 0x00000000004be2bb in jami::Conference::removeParticipant (this=0x1d2f140, participant_id="6158319920365303")
at conference.cpp:884
#26 0x00000000004fa526 in jami::Manager::removeParticipant (this=0x1a6d6e0 <jami::Manager::instance()::instance>,
call=...) at manager.cpp:1545
#27 0x00000000004f7c22 in jami::Manager::hangupCall (this=0x1a6d6e0 <jami::Manager::instance()::instance>,
callId="6158319920365303") at manager.cpp:1105
#28 0x00000000004f9424 in jami::Manager::ManagerPimpl::hangupConference (this=0x1cb7760, conference=...)
at manager.cpp:1370
#29 0x00000000004f7dc4 in jami::Manager::hangupConference (this=0x1a6d6e0 <jami::Manager::instance()::instance>,
accountId="15d9d069807f7c0d", confId="") at manager.cpp:1127
#30 0x00000000004849ff in jami::test::ConferenceTest::hangupConference (this=0x1cb37b0) at call/conference.cpp:311
#31 0x00000000004939b9 in jami::test::ConferenceTest::testParticipantAddRmSecondVideo (this=0x1cb37b0)
at call/conference.cpp:881
--Type <RET> for more, q to quit, c to continue without paging--
#32 0x00000000004ab82d in std::__invoke_impl<void, void (jami::test::ConferenceTest::*&)(), jami::test::ConferenceTest*&> (
__f=@0x1cd08e0: (void (jami::test::ConferenceTest::*)(jami::test::ConferenceTest * const)) 0x4930d6 <jami::test::ConferenceTest::testParticipantAddRmSecondVideo()>, __t=@0x1cd08f0: 0x1cb37b0) at /usr/include/c++/12/bits/invoke.h:74
#33 0x00000000004aad83 in std::__invoke<void (jami::test::ConferenceTest::*&)(), jami::test::ConferenceTest*&> (
__fn=@0x1cd08e0: (void (jami::test::ConferenceTest::*)(jami::test::ConferenceTest * const)) 0x4930d6 <jami::test::ConferenceTest::testParticipantAddRmSecondVideo()>) at /usr/include/c++/12/bits/invoke.h:96
#34 0x00000000004a9f4e in std::_Bind<void (jami::test::ConferenceTest::*(jami::test::ConferenceTest*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (this=0x1cd08e0, __args=...) at /usr/include/c++/12/functional:484
#35 0x00000000004a8942 in std::_Bind<void (jami::test::ConferenceTest::*(jami::test::ConferenceTest*))()>::operator()<, void>() (this=0x1cd08e0) at /usr/include/c++/12/functional:567
#36 0x00000000004a7218 in std::__invoke_impl<void, std::_Bind<void (jami::test::ConferenceTest::*(jami::test::ConferenceTest*))()>&>(std::__invoke_other, std::_Bind<void (jami::test::ConferenceTest::*(jami::test::ConferenceTest*))()>&)
(__f=...) at /usr/include/c++/12/bits/invoke.h:61
#37 0x00000000004a563e in std::__invoke_r<void, std::_Bind<void (jami::test::ConferenceTest::*(jami::test::ConferenceTest*))()>&>(std::_Bind<void (jami::test::ConferenceTest::*(jami::test::ConferenceTest*))()>&) (__fn=...)
at /usr/include/c++/12/bits/invoke.h:111
#38 0x00000000004a3127 in std::_Function_handler<void (), std::_Bind<void (jami::test::ConferenceTest::*(jami::test::ConferenceTest*))()> >::_M_invoke(std::_Any_data const&) (__functor=...)
at /usr/include/c++/12/bits/std_function.h:290
#39 0x000000000049dbb4 in std::function<void ()>::operator()() const (this=0x1cb0990)
at /usr/include/c++/12/bits/std_function.h:591
#40 0x00000000004acc14 in CppUnit::TestCaller<jami::test::ConferenceTest>::runTest (this=0x1cb0950)
at /usr/include/cppunit/TestCaller.h:175
#41 0x00007ffff7f7ea66 in CppUnit::TestCaseMethodFunctor::operator()() const () from /lib64/libcppunit-1.15.so.1
#42 0x00007ffff7f7e9b3 in CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) () from /lib64/libcppunit-1.15.so.1
#43 0x00007ffff7f77a23 in CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&)
() from /lib64/libcppunit-1.15.so.1
#44 0x00007ffff7f8041a in CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /lib64/libcppunit-1.15.so.1
#45 0x00007ffff7f88dba in CppUnit::TestCase::run(CppUnit::TestResult*) () from /lib64/libcppunit-1.15.so.1
#46 0x00007ffff7f7edad in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) ()
from /lib64/libcppunit-1.15.so.1
#47 0x00007ffff7f7ebdb in CppUnit::TestComposite::run(CppUnit::TestResult*) () from /lib64/libcppunit-1.15.so.1
#48 0x00007ffff7f7edad in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) ()
from /lib64/libcppunit-1.15.so.1
#49 0x00007ffff7f7ebdb in CppUnit::TestComposite::run(CppUnit::TestResult*) () from /lib64/libcppunit-1.15.so.1
#50 0x00007ffff7f7f716 in CppUnit::TestResult::runTest(CppUnit::Test*) () from /lib64/libcppunit-1.15.so.1
#51 0x00007ffff7f86143 in CppUnit::TestRunner::run(CppUnit::TestResult&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /lib64/libcppunit-1.15.so.1
#52 0x00007ffff7f912c4 in CppUnit::TextTestRunner::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, bool) () from /lib64/libcppunit-1.15.so.1
#53 0x0000000000493e9b in main () at call/conference.cpp:889
```Backloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/761Audio crash in pulse2022-11-03T14:50:17ZSébastien BlinAudio crash in pulseScenario: none provided
Since: probably last changes (seems a recent crash and test-recorder get some crashes too)
```
New Thread 0x7fff41feb640 (LWP 971442)]
[New Thread 0x7fff387d8640 (LWP 971443)]
[Thread 0x7fff41feb640 (LWP 971442)...Scenario: none provided
Since: probably last changes (seems a recent crash and test-recorder get some crashes too)
```
New Thread 0x7fff41feb640 (LWP 971442)]
[New Thread 0x7fff387d8640 (LWP 971443)]
[Thread 0x7fff41feb640 (LWP 971442) exited]
[Thread 0x7fff2f7c6640 (LWP 971342) exited]
[1662562478.697|57330|audio_frame_resizer.cpp :117 ] Audio resizer error: Invalid argument
terminate called after throwing an instance of 'std::runtime_error'
what(): Failed to add audio to frame resizer
Thread 21 "threaded-ml" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffc67fc640 (LWP 909298)]
__pthread_kill_implementation (no_tid=0, signo=6, threadid=140736523650624) at ./nptl/pthread_kill.c:44
44 ./nptl/pthread_kill.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140736523650624) at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=140736523650624) at ./nptl/pthread_kill.c:78
#2 __GI___pthread_kill (threadid=140736523650624, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3 0x00007ffff60ad476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4 0x00007ffff60937f3 in __GI_abort () at ./stdlib/abort.c:79
#5 0x00007ffff6355bfe in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff636128c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x00007ffff63612f7 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007ffff6361558 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
#9 0x00007ffff6adef7a in jami::AudioFrameResizer::enqueue (this=0x7fffac2bba28, frame=...)
at ./media/audio/audio_frame_resizer.cpp:118
#10 0x00007ffff6b11a28 in jami::AudioProcessor::enqueue (this=0x7fffac2bba20, frameResizer=..., buf=...)
at ./media/audio/audio-processing/audio_processor.h:181
#11 0x00007ffff6b116ec in jami::AudioProcessor::putPlayback (this=0x7fffac2bba20,
buf=std::shared_ptr<DRing::AudioFrame> (use count 2, weak count 0) = {...})
at ./media/audio/audio-processing/audio_processor.h:61
#12 0x00007ffff6afc22a in jami::AudioLayer::getToPlay (this=0x55555576eea0, format=..., writableSamples=1288)
at ./media/audio/audiolayer.cpp:307
#13 0x00007ffff6b1c2d4 in jami::PulseLayer::writeToSpeaker (this=0x55555576eea0)
at media/audio/pulseaudio/pulselayer.cpp:503
#14 0x00007ffff6b2ba64 in std::__invoke_impl<void, void (jami::PulseLayer::*&)(), jami::PulseLayer*&> (
__f=@0x7fff80011790: (void (jami::PulseLayer::*)(jami::PulseLayer * const)) 0x7ffff6b1c140 <jami::PulseLayer::writeToSpeaker()>, __t=@0x7fff800117a0: 0x55555576eea0) at /usr/include/c++/11/bits/invoke.h:74
#15 0x00007ffff6b29a4f in std::__invoke<void (jami::PulseLayer::*&)(), jami::PulseLayer*&> (
__fn=@0x7fff80011790: (void (jami::PulseLayer::*)(jami::PulseLayer * const)) 0x7ffff6b1c140 <jami::PulseLayer::writeToSpeaker()>) at /usr/include/c++/11/bits/invoke.h:96
#16 0x00007ffff6b27885 in std::_Bind<void (jami::PulseLayer::*(jami::PulseLayer*))()>::__call<void, unsigned long&&, 0ul>(std::tuple<unsigned long&&>&&, std::_Index_tuple<0ul>) (this=0x7fff80011790, __args=...)
at /usr/include/c++/11/functional:420
#17 0x00007ffff6b25cee in std::_Bind<void (jami::PulseLayer::*(jami::PulseLayer*))()>::operator()<unsigned long, void>(unsigned long&&) (this=0x7fff80011790) at /usr/include/c++/11/functional:503
#18 0x00007ffff6b2487b in std::__invoke_impl<void, std::_Bind<void (jami::PulseLayer::*(jami::PulseLayer*))()>&, unsigned long>(std::__invoke_other, std::_Bind<void (jami::PulseLayer::*(jami::PulseLayer*))()>&, unsigned long&&) (
__f=...) at /usr/include/c++/11/bits/invoke.h:61
#19 0x00007ffff6b22e71 in std::__invoke_r<void, std::_Bind<void (jami::PulseLayer::*(jami::PulseLayer*))()>&, unsigned long>(std::_Bind<void (jami::PulseLayer::*(jami::PulseLayer*))()>&, unsigned long&&) (__fn=...)
at /usr/include/c++/11/bits/invoke.h:111
#20 0x00007ffff6b2139c in std::_Function_handler<void (unsigned long), std::_Bind<void (jami::PulseLayer::*(jami::PulseLayer*))()> >::_M_invoke(std::_Any_data const&, unsigned long&&) (__functor=..., __args#0=@0x7fffc67f8d10: 5152)
at /usr/include/c++/11/bits/std_function.h:290
#21 0x00007ffff6ad9efb in std::function<void (unsigned long)>::operator()(unsigned long) const (
this=0x7fff8003ba70, __args#0=5152) at /usr/include/c++/11/bits/std_function.h:590
#22 0x00007ffff6ad8f93 in operator() (__closure=0x0, bytes=5152, userdata=0x7fff8003ba50)
at media/audio/pulseaudio/audiostream.cpp:96
#23 0x00007ffff6ad8fc7 in _FUN () at media/audio/pulseaudio/audiostream.cpp:97
--Type <RET> for more, q to quit, c to continue without paging--
#24 0x00007ffff5ea54be in ?? () from /lib/x86_64-linux-gnu/libpulse.so.0
#25 0x00007ffff4a00540 in pa_pdispatch_run () from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so
#26 0x00007ffff5e8a083 in ?? () from /lib/x86_64-linux-gnu/libpulse.so.0
#27 0x00007ffff4a05487 in ?? () from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so
#28 0x00007ffff4a061d8 in ?? () from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so
#29 0x00007ffff4a0659a in ?? () from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so
#30 0x00007ffff4a0a73a in ?? () from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so
#31 0x00007ffff5e9da73 in pa_mainloop_dispatch () from /lib/x86_64-linux-gnu/libpulse.so.0
#32 0x00007ffff5e9e0ca in pa_mainloop_iterate () from /lib/x86_64-linux-gnu/libpulse.so.0
#33 0x00007ffff5e9e170 in pa_mainloop_run () from /lib/x86_64-linux-gnu/libpulse.so.0
#34 0x00007ffff5eae37d in ?? () from /lib/x86_64-linux-gnu/libpulse.so.0
#35 0x00007ffff4a18cb3 in ?? () from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so
#36 0x00007ffff60ffb43 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#37 0x00007ffff6191a00 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
```Aline Gondim SantosEzra PierceAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/756Unable to select a camera capture resolution other than 640x4802022-09-02T17:18:22ZAndreas TraczykUnable to select a camera capture resolution other than 640x480Regardless of the chosen video settings, the format will be 640x480 with the max supported rate for that resolution.
Seen on Windows: Version (BETA): 202208261700Regardless of the chosen video settings, the format will be 640x480 with the max supported rate for that resolution.
Seen on Windows: Version (BETA): 202208261700Andreas TraczykAndreas Traczykhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/755Crash(Windows only?) during video call2023-01-04T19:50:51ZAndreas TraczykCrash(Windows only?) during video callOccasional crashes occur at some point during a video call.
Seen on Windows: Version (BETA): 202208261700
```
> [Inline Frame] yuv2rgb_write(unsigned char *) Line 1644 C
[Inline Frame] yuv2rgb_2_c_template(SwsContext *) Line 1768 C
...Occasional crashes occur at some point during a video call.
Seen on Windows: Version (BETA): 202208261700
```
> [Inline Frame] yuv2rgb_write(unsigned char *) Line 1644 C
[Inline Frame] yuv2rgb_2_c_template(SwsContext *) Line 1768 C
yuv2x2rgb10_2_c(SwsContext * c, const short * * buf, const short * * ubuf, const short * * vbuf, const short * * abuf, unsigned char * dest, int dstW, int yalpha, int uvalpha, int y) Line 1872 C
packed_vscale(SwsContext * c, SwsFilterDescriptor * desc, int sliceY, int sliceH) Line 157 C
swscale(SwsContext * c, const unsigned char * * src, int * srcStride, int srcSliceY, int srcSliceH, unsigned char * * dst, int * dstStride, int dstSliceY, int dstSliceH) Line 501 C
scale_internal(SwsContext * c, const unsigned char * const * srcSlice, const int * srcStride, int srcSliceY, int srcSliceH, unsigned char * const * dstSlice, const int * dstStride, int dstSliceY, int dstSliceH) Line 1046 C
sws_scale(SwsContext * c, const unsigned char * const * srcSlice, const int * srcStride, int srcSliceY, int srcSliceH, unsigned char * const * dst, const int * dstStride) Line 1215 C
jami::video::VideoScaler::scale(const AVFrame * input_frame, AVFrame * output_frame) Line 74 C++
[Inline Frame] jami::video::SinkClient::sendFrameTransformed(AVFrame * frame) Line 365 C++
jami::video::SinkClient::update(jami::Observable<std::shared_ptr<DRing::MediaFrame>> * __formal, const std::shared_ptr<DRing::MediaFrame> & frame_p) Line 464 C++
jami::Observable<std::shared_ptr<DRing::MediaFrame>>::notify(std::shared_ptr<DRing::MediaFrame> data) Line 137 C++
jami::video::VideoGenerator::publishFrame(std::shared_ptr<DRing::VideoFrame> frame) Line 56 C++
[External Code]
[Inline Frame] std::_Func_class<void,std::shared_ptr<DRing::MediaFrame> &&>::operator()(std::shared_ptr<DRing::MediaFrame> &&) Line 968 C++
jami::MediaDecoder::decode(AVPacket & packet) Line 699 C++
[Inline Frame] std::_Func_class<enum jami::DecodeStatus,AVPacket &>::operator()(AVPacket &) Line 968 C++
jami::MediaDemuxer::decode() Line 410 C++
jami::MediaDecoder::decode() Line 714 C++
jami::video::VideoReceiveThread::decodeFrame() Line 206 C++
[Inline Frame] std::_Func_class<void>::operator()() Line 968 C++
jami::ThreadLoop::mainloop(std::thread::id & tid, const std::function<bool __cdecl(void)> setup, const std::function<void __cdecl(void)> process, const std::function<void __cdecl(void)> cleanup) Line 38 C++
[External Code]
```Andreas TraczykAndreas Traczykhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/743Issue if two peers make a call at the same time (to each other)2023-03-31T15:56:51ZElysIssue if two peers make a call at the same time (to each other)Alice: Android (EMUI 12) 20220615-01
Bob: Windows 10: Jami (beta-)Version 202206231612
Steps to reproduce:
BOTH peers - BOB AND Alice tap the make video call button at the same time to call each other
It does not matter if Bob (the W...Alice: Android (EMUI 12) 20220615-01
Bob: Windows 10: Jami (beta-)Version 202206231612
Steps to reproduce:
BOTH peers - BOB AND Alice tap the make video call button at the same time to call each other
It does not matter if Bob (the Windows 10 user) accepts the call or not - Alice will always get the call
However:
Bob will never receive the call (the call fails)
Alice now makes a video call (Alice -> Bob) - although Bob never received the call
Maybe the developers can also try out the following scenarios:
- One peer makes an audio call the other peer makes a video call AT THE SAME TIME ("username1" <-> "username2")
- other OS: for example Windows 10 <-> Windows 10; or Android <-> Android, or Ubuntu >-> Windows 10 etc.
- "sameusername" <-> "sameusername"
- "username1" <-> "username2"
- and other situationsSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/741Voice activity detection => Fix jittering2022-08-15T21:06:12ZMehdi GhayourVoice activity detection => Fix jitteringTobias HildebrandtSébastien BlinAline Gondim SantosTobias Hildebrandthttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/731Distorted video for conferences on video-split (DBUS)2022-04-13T13:14:38ZSébastien BlinDistorted video for conferences on video-split (DBUS)# Scenario
+ Build with --no-libwrap
+ Do a conference, go in one big with small layout
# Expected
Video should be ok
# Current result
video is distorted# Scenario
+ Build with --no-libwrap
+ Do a conference, go in one big with small layout
# Expected
Video should be ok
# Current result
video is distortedMohamed ChibaniAline Gondim SantosSébastien BlinMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/727Camera not opening if rdv host joins2023-02-17T13:51:27ZSébastien BlinCamera not opening if rdv host joins# Scenario
+ Alice is a rdv host
+ Bob calls alice (he will be alone in a rdv)
+ Alice joins the call
# Expected
+ Alice and Bob should see their video in the rdv
# Current
+ Alice's camera is not opening and mute is broken
# Obser...# Scenario
+ Alice is a rdv host
+ Bob calls alice (he will be alone in a rdv)
+ Alice joins the call
# Expected
+ Alice and Bob should see their video in the rdv
# Current
+ Alice's camera is not opening and mute is broken
# Observation
+ Device is busy and not opening
+ The camera become unusable for all apps as busy, even after leaving jamihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/723Mediademuxer: buffer can increase2022-02-16T21:47:04ZSébastien BlinMediademuxer: buffer can increaseIn MediaDemuxer::decode():
`av_read_frame` only return one frame of the video buffer. However, if the CPU is too slow to decode (should not happen, but still), frames can just be stored and the video buffer can increase with a big maxim...In MediaDemuxer::decode():
`av_read_frame` only return one frame of the video buffer. However, if the CPU is too slow to decode (should not happen, but still), frames can just be stored and the video buffer can increase with a big maximum.
This should never happen. If the video buffer gets too big, the video will have a big delay.
But we also should not hide other problems. So, potential solution:
Check the size of the internal video buffer and log if too big before flushing.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/719Call Audio Recording Not Working2022-07-13T13:28:17ZtrymeoutCall Audio Recording Not WorkingRecording files are not made when the call is an audio only. I would expect a audio or video file to be generated when recording a call were no ones camera is on.Recording files are not made when the call is an audio only. I would expect a audio or video file to be generated when recording a call were no ones camera is on.Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/713Conference layout seems broken after 25+ participants2024-02-14T14:07:15ZSébastien BlinConference layout seems broken after 25+ participants# Scenario
+ Start a conference with 25 participants
+ Another participant join
# Expected
+ The layout should be updated
# Current result
Seems blocked to the previous view# Scenario
+ Start a conference with 25 participants
+ Another participant join
# Expected
+ The layout should be updated
# Current result
Seems blocked to the previous viewBackloghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/709Lag with decodingAccelerated: true2022-03-17T19:55:39ZSébastien BlinLag with decodingAccelerated: trueIn fact I see 3 bugs:
1. In `SinkClient::update`
doTransfer is True even if video-split is not used yet (cf Conference::sendConferenceInfos(), no delay if createSinks is commented). This must be false if sink is not used. This means th...In fact I see 3 bugs:
1. In `SinkClient::update`
doTransfer is True even if video-split is not used yet (cf Conference::sendConferenceInfos(), no delay if createSinks is commented). This must be false if sink is not used. This means that registerSinkClient is done in LRC even if sink is not used
2. HAVE_SHM is true if libwrap is true in LRC. We should change the configure to have enable-shm with dbus and not with libwrap.
3. `HardwareAccel::transferToMainMemory` is called for every participant, for every sink client. It should be done only once and then cropped by the sink clients.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/708Medias: Big lag when a lot of person leave the conference2022-08-19T14:41:44ZSébastien BlinMedias: Big lag when a lot of person leave the conference# Scenario
+ Be in a rdv with 10 people
+ Every body leave except 2 people
# Current result
+ Big lag on video
# Expected
+ No lag# Scenario
+ Be in a rdv with 10 people
+ Every body leave except 2 people
# Current result
+ Big lag on video
# Expected
+ No laghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/707Participant has green video during conference2023-03-14T19:21:54ZAndreas TraczykParticipant has green video during conference- this effect seems to present only when opening the camera at certain resolutions- this effect seems to present only when opening the camera at certain resolutionshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/699Conference: Show remote recording indication for non-host in a conference2022-10-12T13:42:32ZSébastien BlinConference: Show remote recording indication for non-host in a conference# Scenario
+ Start a conf A(host),B,C
+ B start to record
# Current result
only A,B have the remote recording indication
# Expected
C show the remote recording# Scenario
+ Start a conf A(host),B,C
+ B start to record
# Current result
only A,B have the remote recording indication
# Expected
C show the remote recordingSébastien BlinSébastien Blin