From eff3c8905f115dd3603e99237993119a1a09a6ec Mon Sep 17 00:00:00 2001 From: "xians@webrtc.org" Date: Tue, 6 Dec 2011 10:02:56 +0000 Subject: [PATCH] this patch fixes the valgrind warnings in the adm api test for pulseaudio in linux. Review URL: http://webrtc-codereview.appspot.com/301012 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1108 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../main/source/audio_device_buffer.cc | 2 ++ .../source/linux/audio_device_pulse_linux.cc | 19 ++++++++++++++++--- .../main/test/audio_device_test_api.cc | 5 ++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/modules/audio_device/main/source/audio_device_buffer.cc b/src/modules/audio_device/main/source/audio_device_buffer.cc index b5a78e3e74..e8bbfdac2a 100644 --- a/src/modules/audio_device/main/source/audio_device_buffer.cc +++ b/src/modules/audio_device/main/source/audio_device_buffer.cc @@ -55,6 +55,8 @@ AudioDeviceBuffer::AudioDeviceBuffer() : { // valid ID will be set later by SetId, use -1 for now WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s created", __FUNCTION__); + memset(_recBuffer, 0, kMaxBufferSizeBytes); + memset(_playBuffer, 0, kMaxBufferSizeBytes); } // ---------------------------------------------------------------------------- diff --git a/src/modules/audio_device/main/source/linux/audio_device_pulse_linux.cc b/src/modules/audio_device/main/source/linux/audio_device_pulse_linux.cc index 512121634c..4c3be521f9 100644 --- a/src/modules/audio_device/main/source/linux/audio_device_pulse_linux.cc +++ b/src/modules/audio_device/main/source/linux/audio_device_pulse_linux.cc @@ -133,6 +133,8 @@ AudioDeviceLinuxPulse::AudioDeviceLinuxPulse(const WebRtc_Word32 id) : "%s created", __FUNCTION__); memset(_paServerVersion, 0, sizeof(_paServerVersion)); + memset(&_playBufferAttr, 0, sizeof(_playBufferAttr)); + memset(&_recBufferAttr, 0, sizeof(_recBufferAttr)); } AudioDeviceLinuxPulse::~AudioDeviceLinuxPulse() @@ -1115,7 +1117,7 @@ WebRtc_Word32 AudioDeviceLinuxPulse::SetPlayoutDevice(WebRtc_UWord16 index) return -1; } - const WebRtc_UWord16 nDevices(PlayoutDevices()); + const WebRtc_UWord16 nDevices = PlayoutDevices(); WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, " number of availiable output devices is %u", nDevices); @@ -1149,7 +1151,7 @@ WebRtc_Word32 AudioDeviceLinuxPulse::PlayoutDeviceName( WEBRTC_TRACE(kTraceModuleCall, kTraceAudioDevice, _id, "AudioDeviceLinuxPulse::PlayoutDeviceName(index=%u)", index); - const WebRtc_UWord16 nDevices(PlayoutDevices()); + const WebRtc_UWord16 nDevices = PlayoutDevices(); if ((index > (nDevices - 1)) || (name == NULL)) { @@ -2239,7 +2241,7 @@ WebRtc_Word32 AudioDeviceLinuxPulse::GetDefaultDeviceInfo(bool recDevice, WebRtc_Word8* name, WebRtc_UWord16& index) { - WebRtc_Word8 tmpName[kAdmMaxDeviceNameSize]; + WebRtc_Word8 tmpName[kAdmMaxDeviceNameSize] = {0}; // subtract length of "default: " WebRtc_UWord16 nameLen = kAdmMaxDeviceNameSize - 9; WebRtc_Word8* pName = NULL; @@ -2333,6 +2335,11 @@ WebRtc_Word32 AudioDeviceLinuxPulse::InitPulseAudio() // Create a mainloop API and connection to the default server // the mainloop is the internal asynchronous API event loop + if (_paMainloop) { + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, + " PA mainloop has already existed"); + return -1; + } _paMainloop = LATE(pa_threaded_mainloop_new)(); if (!_paMainloop) { @@ -2365,6 +2372,12 @@ WebRtc_Word32 AudioDeviceLinuxPulse::InitPulseAudio() } // Create a new PulseAudio context + if (_paContext){ + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, + " PA context has already existed"); + PaUnLock(); + return -1; + } _paContext = LATE(pa_context_new)(_paMainloopApi, "WEBRTC VoiceEngine"); if (!_paContext) diff --git a/src/modules/audio_device/main/test/audio_device_test_api.cc b/src/modules/audio_device/main/test/audio_device_test_api.cc index 5f5ce26ba5..289908bd99 100644 --- a/src/modules/audio_device/main/test/audio_device_test_api.cc +++ b/src/modules/audio_device/main/test/audio_device_test_api.cc @@ -83,6 +83,8 @@ class AudioEventObserverAPI: public AudioDeviceObserver { public: AudioEventObserverAPI(AudioDeviceModule* audioDevice) : + _error(kRecordingError), + _warning(kRecordingWarning), _audioDevice(audioDevice) { } @@ -277,10 +279,11 @@ int api_test() myId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); TEST((audioDevice = AudioDeviceModuleImpl::Create( myId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); - // create default implementation (=ALSA Audio) instance + // create default implementation instance TEST((audioDevice = AudioDeviceModuleImpl::Create( myId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); audioDevice->AddRef(); + TEST(audioDevice->Terminate() == 0); TEST(audioDevice->Release() == 0); // explicitly specify usage of Pulse Audio (same as default) TEST((audioDevice = AudioDeviceModuleImpl::Create(