mirror of
https://github.com/projectM-visualizer/projectm.git
synced 2026-03-30 03:03:53 +00:00
carm: memory leak fix when multiple preset extensions exist for same factory pointer.
git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/personal/carm/represet@1204 6778bc44-b910-0410-a7a0-be141de4315d
This commit is contained in:
@ -29,9 +29,14 @@ MilkdropPresetFactory::MilkdropPresetFactory(int gx, int gy) {
|
||||
|
||||
MilkdropPresetFactory::~MilkdropPresetFactory() {
|
||||
|
||||
std::cerr << "[~MilkdropPresetFactory] destroy infix ops" << std::endl;
|
||||
Eval::destroy_infix_ops();
|
||||
std::cerr << "[~MilkdropPresetFactory] destroy builtin func" << std::endl;
|
||||
BuiltinFuncs::destroy_builtin_func_db();
|
||||
std::cerr << "[~MilkdropPresetFactory] delete preset out puts" << std::endl;
|
||||
delete(_presetOutputs);
|
||||
std::cerr << "[~MilkdropPresetFactory] done" << std::endl;
|
||||
|
||||
}
|
||||
|
||||
/* Reinitializes the engine variables to a default (conservative and sane) value */
|
||||
|
||||
@ -55,12 +55,14 @@ NativePresetFactory::NativePresetFactory() {}
|
||||
|
||||
NativePresetFactory::~NativePresetFactory() {
|
||||
|
||||
for (PresetLibraryMap::iterator pos = _libraries.begin(); pos != _libraries.end(); ++pos)
|
||||
for (PresetLibraryMap::iterator pos = _libraries.begin(); pos != _libraries.end(); ++pos) {
|
||||
std::cerr << "deleting preset library" << std::endl;
|
||||
delete(pos->second);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
PresetLibrary * NativePresetFactory::loadLibrary(const std::string & url) {
|
||||
|
||||
if (_libraries.count(url))
|
||||
@ -91,6 +93,8 @@ PresetLibrary * NativePresetFactory::loadLibrary(const std::string & url) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::cerr << "[NativePresetFactory] creating preset library from url " << url << std::endl;
|
||||
|
||||
PresetLibrary * library = new PresetLibrary(handle, create, destroy);
|
||||
|
||||
_libraries.insert(std::make_pair(url, library));
|
||||
|
||||
@ -24,8 +24,12 @@ PresetFactoryManager::PresetFactoryManager() : _gx(0), _gy(0) {}
|
||||
|
||||
PresetFactoryManager::~PresetFactoryManager() {
|
||||
for (std::vector<PresetFactory *>::iterator pos = _factoryList.begin();
|
||||
pos != _factoryList.end(); ++pos)
|
||||
pos != _factoryList.end(); ++pos) {
|
||||
std::cerr << "fuck" << std::endl;
|
||||
assert(*pos);
|
||||
delete(*pos);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
void PresetFactoryManager::initialize(int gx, int gy) {
|
||||
@ -51,13 +55,14 @@ void PresetFactoryManager::registerFactory(const std::string & extensions, Prese
|
||||
std::stringstream ss(extensions);
|
||||
std::string extension;
|
||||
|
||||
_factoryList.push_back(factory);
|
||||
|
||||
while (ss >> extension) {
|
||||
if (_factoryMap.count(extension)) {
|
||||
std::cerr << "[PresetFactoryManager] Warning: extension \"" << extension <<
|
||||
"\" already has a factory. New factory handler ignored." << std::endl;
|
||||
} else {
|
||||
_factoryMap.insert(std::make_pair(extension, factory));
|
||||
_factoryList.push_back(factory);
|
||||
_factoryMap.insert(std::make_pair(extension, factory));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -89,6 +89,13 @@ int main(int argc, char **argv) {
|
||||
|
||||
float fakePCM[512];
|
||||
|
||||
|
||||
void cleanup() {
|
||||
delete(globalPM);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
void renderLoop() {
|
||||
while (1) {
|
||||
projectMEvent evt;
|
||||
@ -107,8 +114,7 @@ void renderLoop() {
|
||||
case PROJECTM_KEYDOWN:
|
||||
switch (key) {
|
||||
case PROJECTM_K_ESCAPE:
|
||||
delete(globalPM);
|
||||
exit(0);
|
||||
cleanup();
|
||||
break;
|
||||
case PROJECTM_K_f: {
|
||||
fullscreen = !fullscreen;
|
||||
@ -122,7 +128,7 @@ void renderLoop() {
|
||||
break;
|
||||
}
|
||||
case PROJECTM_K_q:
|
||||
exit(1);
|
||||
cleanup();
|
||||
break;
|
||||
default:
|
||||
globalPM->key_handler(evt, key, mod);
|
||||
|
||||
Reference in New Issue
Block a user