From 063d4c75f5ef7942e289de855a6f554e5e73db31 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 18 Nov 2009 15:49:54 -0500 Subject: [PATCH] [#2366] Set callback to null when deleting Pulseaudio streams --- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 11 +++++++++-- sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 10 +++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 89986506ee..38608fbf2b 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 8f5b94c5a0..906ba0a541 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(); -- GitLab