summaryrefslogtreecommitdiff
path: root/RtAudio.cpp
diff options
context:
space:
mode:
authorJakob Leben <jakob.leben@gmail.com>2019-02-12 11:36:40 -0800
committerJakob Leben <jakob.leben@gmail.com>2019-02-12 11:50:45 -0800
commit56cbfb56274b97a44337e15c00a9d552ec7a6dbd (patch)
tree538a2366929db805c746108b5057d381b52992b7 /RtAudio.cpp
parent802179520e2d464f87389e34699510927a4a0ab3 (diff)
Alsa API: Fix use of invalid card handle
Diffstat (limited to 'RtAudio.cpp')
-rw-r--r--RtAudio.cpp12
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 );
}