diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 89986506eede7627bdde82ca37928eca99300d41..38608fbf2bb7a21ad59dfea3b9a13c4e41da6251 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -101,15 +101,22 @@ AudioStream::disconnectStream (void) { _debug ("Destroy audio streams\n"); - // pa_threaded_mainloop_lock (_mainloop); + pa_threaded_mainloop_lock (_mainloop); if (_audiostream) { pa_stream_disconnect (_audiostream); + + // make sure we don't get any further callback + pa_stream_set_state_callback(_audiostream, NULL, NULL); + pa_stream_set_write_callback (_audiostream, NULL, NULL); + pa_stream_set_underflow_callback (_audiostream, NULL, NULL); + pa_stream_set_overflow_callback (_audiostream, NULL, NULL); + pa_stream_unref (_audiostream); _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 8f5b94c5a0b96f0045417116322fc0f96841e15f..906ba0a541a8ee50575087c0679bea536ec0d177 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -134,7 +134,7 @@ PulseLayer::closeLayer (void) // record->disconnectStream(); // closeCaptureStream(); - disconnectAudioStream(); + // disconnectAudioStream(); if (context) { pa_context_disconnect (context); @@ -219,7 +219,7 @@ void PulseLayer::context_state_callback (pa_context* c, void* user_data) bool PulseLayer::disconnectAudioStream (void) { - _debug (" PulseLayer::disconnectAudioStream( void ) \n"); + _debug ("PulseLayer::disconnectAudioStream( void ) \n"); closePlaybackStream(); @@ -294,9 +294,7 @@ void PulseLayer::closeCaptureStream (void) { if (record) { - pa_threaded_mainloop_lock (m); delete record; - pa_threaded_mainloop_unlock (m); record=NULL; } } @@ -305,9 +303,7 @@ void PulseLayer::closePlaybackStream (void) { if (playback) { - pa_threaded_mainloop_lock (m); delete playback; - pa_threaded_mainloop_unlock (m); playback=NULL; } } @@ -662,7 +658,6 @@ void PulseLayer::readFromMic (void) size_t r; // if (record->getStreamState() - // pa_threaded_mainloop_lock (m); int readableSize = pa_stream_readable_size (record->pulseStream()); @@ -672,6 +667,7 @@ void PulseLayer::readFromMic (void) _debug ("pa_stream_peek() failed: %s\n" , pa_strerror (pa_context_errno (context))); } + if (data != 0) { int _mainBufferSampleRate = getMainBuffer()->getInternalSamplingRate();