grishka / libtgvoip

VoIP library for Telegram clients
The Unlicense
387 stars 156 forks source link

Fix deadlock after call #17

Closed mymedia2 closed 7 years ago

mymedia2 commented 7 years ago

Fix for telegramdesktop/tdesktop#3408. I didn't test it properly for the presence of any leaks, but I hope nothing is broken.

grishka commented 7 years ago

Joining threads is needed to make sure the thread stops running before any resources it might use are deallocated thus eliminating weird crashes. You can't just remove these calls and expect that everything would work. It might work in some cases, but as it always is with multi-threaded code, any kind of race condition isn't 100% reproducible.

mymedia2 commented 7 years ago

Okey, got it.

Now calls complete without freezing, thank you very much! But... it seems you forgot to include logging.h header for LOGW macro in audio/AudioInput.cpp and audio/AudioOutput.cpp files. This causes build errors.

[ 64%] Building CXX object CMakeFiles/libtgvoip.dir/build/libtgvoip-0.4.1~git20170517.937a857/audio/AudioInput.o
/usr/bin/c++   -DTGVOIP_USE_DESKTOP_DSP -DWEBRTC_APM_DEBUG_DUMP=0 -DWEBRTC_POSIX -Dlibtgvoip_EXPORTS -I"/build/libtgvoip-0.4.1~git20170517.937a857/obj-i686-linux-gnu/Release/../../webrtc_dsp" -I/usr/include/opus  -g -O2 -fdebug-prefix-map=/build/libtgvoip-0.4.1~git20170517.937a857=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC   -msse2  -o "CMakeFiles/libtgvoip.dir/build/libtgvoip-0.4.1~git20170517.937a857/audio/AudioInput.o" -c "/build/libtgvoip-0.4.1~git20170517.937a857/audio/AudioInput.cpp"
/build/libtgvoip-0.4.1~git20170517.937a857/audio/AudioInput.cpp: In static member function 'static tgvoip::audio::AudioInput* tgvoip::audio::AudioInput::Create(std::__cxx11::string)':
/build/libtgvoip-0.4.1~git20170517.937a857/audio/AudioInput.cpp:64:63: error: 'LOGW' was not declared in this scope
   LOGW("in: PulseAudio available but not working; trying ALSA");
                                                               ^
CMakeFiles/libtgvoip.dir/build.make:1409: recipe for target 'CMakeFiles/libtgvoip.dir/build/libtgvoip-0.4.1~git20170517.937a857/audio/AudioInput.o' failed
make[3]: *** [CMakeFiles/libtgvoip.dir/build/libtgvoip-0.4.1~git20170517.937a857/audio/AudioInput.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory '/build/libtgvoip-0.4.1~git20170517.937a857/obj-i686-linux-gnu'
CMakeFiles/Makefile2:70: recipe for target 'CMakeFiles/libtgvoip.dir/all' failed
make[2]: *** [CMakeFiles/libtgvoip.dir/all] Error 2
make[2]: Leaving directory '/build/libtgvoip-0.4.1~git20170517.937a857/obj-i686-linux-gnu'
Makefile:86: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/build/libtgvoip-0.4.1~git20170517.937a857/obj-i686-linux-gnu'
grishka commented 7 years ago

Fixed