diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 908e8a7a8fb123344646cae1c1a28d5cb832da79..deaab30f5b545228952e237fd4ba8c52b43f8ead 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -99,7 +99,7 @@ AudioStream::disconnectStream (void) { _debug ("Destroy audio streams\n"); - pa_threaded_mainloop_lock (_mainloop); + // pa_threaded_mainloop_lock (_mainloop); if (_audiostream) { pa_stream_disconnect (_audiostream); @@ -107,7 +107,7 @@ AudioStream::disconnectStream (void) _audiostream = NULL; } - pa_threaded_mainloop_unlock (_mainloop); + // pa_threaded_mainloop_unlock (_mainloop); return true; } diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index a570e7df9b2d021636e8776a03a2372e23943057..c1ffa9c9c0ce9836b3366a2acdec810291586baf 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -294,16 +294,26 @@ bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sample void PulseLayer::closeCaptureStream (void) { if (record) { + + pa_threaded_mainloop_lock (m); + delete record; record=NULL; + + pa_threaded_mainloop_unlock (m); } } void PulseLayer::closePlaybackStream (void) { if (playback) { + + pa_threaded_mainloop_lock (m); + delete playback; playback=NULL; + + pa_threaded_mainloop_unlock (m); } } @@ -471,13 +481,12 @@ void PulseLayer::writeToSpeaker (void) if (urgentAvailBytes > 0) { _debug("Urgent Avail?????????????????????\n"); - - // Urgent data (dtmf, incoming call signal) come first. - //_debug("Play urgent!: %i\e" , urgentAvail); + toGet = (urgentAvailBytes < (int) (framesPerBuffer * sizeof (SFLDataFormat))) ? urgentAvailBytes : framesPerBuffer * sizeof (SFLDataFormat); out = (SFLDataFormat*) pa_xmalloc (toGet * sizeof (SFLDataFormat)); _urgentRingBuffer.Get (out, toGet, 100); pa_stream_write (playback->pulseStream(), out, toGet, NULL, 0, PA_SEEK_RELATIVE); + // Consume the regular one as well (same amount of bytes) _mainBuffer.discard (toGet);