comparison engine/core/controller/engine.cpp @ 287:fdb1e98fd8b6

* Create an autorelease pool, so autoreleased SDL objects don't leak (Mac OS X specific issue) * Patch by nschum
author mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
date Sun, 21 Jun 2009 15:43:12 +0000
parents bb9902910067
children 8aae3fabcf41
comparison
equal deleted inserted replaced
286:bbabe4942150 287:fdb1e98fd8b6
75 #include "view/renderers/blockinginforenderer.h" 75 #include "view/renderers/blockinginforenderer.h"
76 #include "view/renderers/genericrenderer.h" 76 #include "view/renderers/genericrenderer.h"
77 #include "engine.h" 77 #include "engine.h"
78 78
79 #ifdef USE_COCOA 79 #ifdef USE_COCOA
80
81 #include <objc/message.h>
80 #include <dlfcn.h> 82 #include <dlfcn.h>
81 83
82 int main(int argc, char **argv) 84 int main(int argc, char **argv)
83 { 85 {
84 return 0; 86 return 0;
110 void* cocoa_lib; 112 void* cocoa_lib;
111 cocoa_lib = dlopen( "/System/Library/Frameworks/Cocoa.framework/Cocoa", RTLD_LAZY ); 113 cocoa_lib = dlopen( "/System/Library/Frameworks/Cocoa.framework/Cocoa", RTLD_LAZY );
112 void (*nsappload)(void); 114 void (*nsappload)(void);
113 nsappload = (void(*)()) dlsym( cocoa_lib, "NSApplicationLoad"); 115 nsappload = (void(*)()) dlsym( cocoa_lib, "NSApplicationLoad");
114 nsappload(); 116 nsappload();
117
118 // Create an autorelease pool, so autoreleased SDL objects don't leak.
119 objc_object *NSAutoreleasePool = objc_getClass("NSAutoreleasePool");
120 m_autoreleasePool =
121 objc_msgSend(NSAutoreleasePool, sel_registerName("new"));
115 #endif 122 #endif
116 preInit(); 123 preInit();
117 } 124 }
118 125
119 EngineSettings& Engine::getSettings() { 126 EngineSettings& Engine::getSettings() {
279 286
280 delete m_timemanager; 287 delete m_timemanager;
281 288
282 TTF_Quit(); 289 TTF_Quit();
283 SDL_Quit(); 290 SDL_Quit();
291 #ifdef USE_COCOA
292 objc_msgSend(m_autoreleasePool, sel_registerName("release"));
293 #endif
284 FL_LOG(_log, "================== Engine destructed =================="); 294 FL_LOG(_log, "================== Engine destructed ==================");
285 m_destroyed = true; 295 m_destroyed = true;
286 //delete m_logmanager; 296 //delete m_logmanager;
287 } 297 }
288 void Engine::initializePumping() { 298 void Engine::initializePumping() {