[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdemultimedia/kmix
From: Christian Esken <esken () kde ! org>
Date: 2005-04-19 21:21:50
Message-ID: 20050419212150.DA73A5FA () office ! kde ! org
[Download RAW message or body]
CVS commit by esken:
Close some small memory leaks, when destroying a Mixer_ALSA instance. Also, go back \
to the trivial getMixerElem() implementation, because it works and is less error \
prone.
M +5 -2 mixer_alsa.h 1.21
M +34 -9 mixer_alsa9.cpp 1.55
--- kdemultimedia/kmix/mixer_alsa9.cpp #1.54:1.55
@@ -44,5 +44,4 @@ extern "C"
//#define KMIX_ALSA_VOLUME_DEBUG
-// @todo Add file descriptor based notifying for seeing changes
Mixer*
@@ -62,4 +61,5 @@ Mixer_ALSA::Mixer_ALSA( int device, int
Mixer_ALSA::~Mixer_ALSA()
{
+ releaseMixer();
}
@@ -113,5 +113,4 @@ Mixer_ALSA::openMixer()
// Card information
- QString devName;
if( m_devnum == -1 )
m_devnum = 0;
@@ -154,4 +153,5 @@ Mixer_ALSA::openMixer()
kdDebug(67100) << probeMessage << "not found: snd_mixer_open err=" << \
snd_strerror(err) << endl; //errormsg( Mixer::ERR_NODEV );
+ _handle = 0;
return Mixer::ERR_NODEV; // if we cannot open the mixer, we have no devices
}
@@ -171,4 +171,5 @@ Mixer_ALSA::openMixer()
}
+ // Memory leak (according to Valgrind): Must possibly call sth. like \
snd_mixer_unload() in releaseMixer() if ( ( err = snd_mixer_load ( _handle ) ) < 0 )
{
@@ -190,5 +191,5 @@ Mixer_ALSA::openMixer()
- sid = (snd_mixer_selem_id_t*)malloc(snd_mixer_selem_id_sizeof()); // I \
believe *we* must malloc it for ourself + //sid = \
(snd_mixer_selem_id_t*)malloc(snd_mixer_selem_id_sizeof()); // I believe *we* must \
malloc it for ourself snd_mixer_selem_get_id( elem, sid );
@@ -220,5 +221,6 @@ Mixer_ALSA::openMixer()
cc = MixDevice::ENUM;
vol = new Volume(); // Dummy, unused
- mixer_sid_list.append( sid );
+ mixer_elem_list.append( elem );
+ //mixer_sid_list.append( sid );
// --- get Enum names START ---
@@ -266,6 +268,6 @@ Mixer_ALSA::openMixer()
* it will be created with maxVolume == 0 && minVolume == 0 */
vol = new Volume( chn, maxVolumePlay, minVolumePlay, maxVolumeRec, \
minVolumeRec );
- //mixer_elem_list.append( elem );
- mixer_sid_list.append( sid );
+ mixer_elem_list.append( elem );
+ //mixer_sid_list.append( sid );
if ( snd_mixer_selem_has_playback_switch ( elem ) ) {
@@ -348,5 +350,24 @@ int
Mixer_ALSA::releaseMixer()
{
- int ret = snd_mixer_close( _handle );
+// kdDebug(67100) << "IN Mixer_ALSA::releaseMixer()" << endl;
+ int ret=0;
+ if ( _handle != 0 )
+ {
+ snd_mixer_free ( _handle );
+ if ( ( ret = snd_mixer_detach ( _handle, devName.latin1() ) ) < 0 )
+ {
+ kdDebug(67100) << "snd_mixer_detach err=" << snd_strerror(ret) << endl;
+ }
+ int ret2 = 0;
+ if ( ( ret2 = snd_mixer_close ( _handle ) ) < 0 )
+ {
+ kdDebug(67100) << "snd_mixer_close err=" << snd_strerror(ret2) << endl;
+ if ( ret == 0 ) ret = ret2; // no error before => use current error code
+ }
+
+ _handle = 0;
+ }
+
+// kdDebug(67100) << "OUT Mixer_ALSA::releaseMixer()" << endl;
return ret;
}
@@ -354,4 +375,5 @@ Mixer_ALSA::releaseMixer()
snd_mixer_elem_t* Mixer_ALSA::getMixerElem(int devnum) {
+/*
snd_mixer_elem_t* elem = 0;
if ( int( mixer_sid_list.count() ) > devnum ) {
@@ -364,5 +386,8 @@ snd_mixer_elem_t* Mixer_ALSA::getMixerEl
}
return elem;
-// return mixer_elem_list[ devnum ];
+*/
+
+ snd_mixer_elem_t* elem = mixer_elem_list[ devnum ];
+ return elem;
}
--- kdemultimedia/kmix/mixer_alsa.h #1.20:1.21
@@ -32,9 +32,12 @@ class Mixer_ALSA : public Mixer
virtual QString errorText(int mixer_error);
- typedef QValueList<snd_mixer_selem_id_t *>AlsaMixerSidList;
- AlsaMixerSidList mixer_sid_list;
+ //typedef QValueList<snd_mixer_selem_id_t *>AlsaMixerSidList;
+ //AlsaMixerSidList mixer_sid_list;
+ typedef QValueList<snd_mixer_elem_t *> AlsaMixerElemList;
+ AlsaMixerElemList mixer_elem_list;
bool _initialUpdate;
snd_mixer_t *_handle;
+ QString devName;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic