diff options
| author | Jakob Leben <jakob.leben@gmail.com> | 2019-02-12 11:36:40 -0800 |
|---|---|---|
| committer | Jakob Leben <jakob.leben@gmail.com> | 2019-02-12 11:50:45 -0800 |
| commit | 56cbfb56274b97a44337e15c00a9d552ec7a6dbd (patch) | |
| tree | 538a2366929db805c746108b5057d381b52992b7 /RtAudio.cpp | |
| parent | 802179520e2d464f87389e34699510927a4a0ab3 (diff) | |
Alsa API: Fix use of invalid card handle
Diffstat (limited to 'RtAudio.cpp')
| -rw-r--r-- | RtAudio.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/RtAudio.cpp b/RtAudio.cpp index f72c899..8c119a3 100644 --- a/RtAudio.cpp +++ b/RtAudio.cpp @@ -6937,7 +6937,7 @@ unsigned int RtApiAlsa :: getDeviceCount( void ) unsigned nDevices = 0; int result, subdevice, card; char name[64]; - snd_ctl_t *handle; + snd_ctl_t *handle = 0; // Count cards and devices card = -1; @@ -6946,6 +6946,7 @@ unsigned int RtApiAlsa :: getDeviceCount( void ) sprintf( name, "hw:%d", card ); result = snd_ctl_open( &handle, name, 0 ); if ( result < 0 ) { + handle = 0; errorStream_ << "RtApiAlsa::getDeviceCount: control open, card = " << card << ", " << snd_strerror( result ) << "."; errorText_ = errorStream_.str(); error( RtAudioError::WARNING ); @@ -6965,7 +6966,8 @@ unsigned int RtApiAlsa :: getDeviceCount( void ) nDevices++; } nextcard: - snd_ctl_close( handle ); + if ( handle ) + snd_ctl_close( handle ); snd_card_next( &card ); } @@ -6986,7 +6988,7 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device ) unsigned nDevices = 0; int result, subdevice, card; char name[64]; - snd_ctl_t *chandle; + snd_ctl_t *chandle = 0; // Count cards and devices card = -1; @@ -6996,6 +6998,7 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device ) sprintf( name, "hw:%d", card ); result = snd_ctl_open( &chandle, name, SND_CTL_NONBLOCK ); if ( result < 0 ) { + chandle = 0; errorStream_ << "RtApiAlsa::getDeviceInfo: control open, card = " << card << ", " << snd_strerror( result ) << "."; errorText_ = errorStream_.str(); error( RtAudioError::WARNING ); @@ -7018,7 +7021,8 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device ) nDevices++; } nextcard: - snd_ctl_close( chandle ); + if ( chandle ) + snd_ctl_close( chandle ); snd_card_next( &card ); } |
