|
From: William N. <fir...@ho...> - 2008-12-15 20:59:04
|
For some reason the python extension object is not deleted when finished with.
//clear up finished sounds
for(std::vector<SourceVoice*>::iterator it=finished.begin();it!=finished.end();++it)
{
playing.erase(*it);
(*it)->ob_refcnt--;//remove the refrence we added when we got the voice
std::cout << "finished voice refrence: " << (*it)->ob_refcnt << std::endl; //prints 0
}
class SourceVoice : public Py::PythonExtension<SourceVoice>
{
IXAudio2SourceVoice *voice;
Sound *sound;
public:
static void init_type();
SourceVoice(IXAudio2SourceVoice *voice, Sound *sound);
virtual ~SourceVoice();
IXAudio2SourceVoice *GetVoice(){return voice;}
private:
Py::Object GetVolume(const Py::Tuple &args);
Py::Object SetVolume(const Py::Tuple &args);
Py::Object Stop (const Py::Tuple &args);
Py::Object ExitLoop (const Py::Tuple &args);
};
SourceVoice::SourceVoice(IXAudio2SourceVoice *_voice, Sound *_sound)
:voice(_voice), sound(_sound)
{
sound->ob_refcnt++;
}
SourceVoice::~SourceVoice()//not called
{
std::cout << "voice destroyed" << std::endl;
sound->ob_refcnt--;
voice->DestroyVoice();
}
Is there some reason why an object is not deleted even when the refcnt hits zero, in fact the objects are not even getting deleted when the python program ends, leaving windows to clear up 100's of MB's of sound data...
_________________________________________________________________
Get a bird’s eye view of the world with Multimap
http://clk.atdmt.com/GBL/go/115454059/direct/01/ |