From 7d4983eb11088dbcccece3cfe6ca502c3509ce23 Mon Sep 17 00:00:00 2001 From: rogerman Date: Fri, 19 Apr 2013 02:16:58 +0000 Subject: [PATCH] Cocoa Port: - Fix memory leak when dispatching commands from an InputManager object. - Fix potential memory leak that can occur if InputHIDManagerTarget delegates created autorelease-able objects within the handleHIDQueue: method. --- desmume/src/cocoa/userinterface/InputManager.mm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/desmume/src/cocoa/userinterface/InputManager.mm b/desmume/src/cocoa/userinterface/InputManager.mm index fb1076073..b2d3515bb 100644 --- a/desmume/src/cocoa/userinterface/InputManager.mm +++ b/desmume/src/cocoa/userinterface/InputManager.mm @@ -636,7 +636,9 @@ void HandleQueueValueAvailableCallback(void *inContext, IOReturn inResult, void if (target != nil) { + NSAutoreleasePool *tempPool = [[NSAutoreleasePool alloc] init]; [[hidManager target] handleHIDQueue:hidQueue]; + [tempPool release]; } else { @@ -1239,7 +1241,9 @@ static std::tr1::unordered_map keyboardNameTable; / if ([emuControl respondsToSelector:cmdAttr.selector]) { - [emuControl performSelector:cmdAttr.selector withObject:[NSValue valueWithBytes:&cmdAttr objCType:@encode(CommandAttributes)]]; + NSValue *cmdObject = [[NSValue alloc] initWithBytes:&cmdAttr objCType:@encode(CommandAttributes)]; + [emuControl performSelector:cmdAttr.selector withObject:cmdObject]; + [cmdObject release]; } } } @@ -1268,7 +1272,9 @@ static std::tr1::unordered_map keyboardNameTable; / if ([emuControl respondsToSelector:cmdAttr.selector]) { - [emuControl performSelector:cmdAttr.selector withObject:[NSValue valueWithBytes:&cmdAttr objCType:@encode(CommandAttributes)]]; + NSValue *cmdObject = [[NSValue alloc] initWithBytes:&cmdAttr objCType:@encode(CommandAttributes)]; + [emuControl performSelector:cmdAttr.selector withObject:cmdObject]; + [cmdObject release]; } didCommandDispatch = YES;