From c062239e6ce0634eeded1932c6cc798274d00900 Mon Sep 17 00:00:00 2001 From: Derk-Jan Hartman Date: Fri, 29 May 2009 20:42:37 +0200 Subject: [PATCH] macosx remote: Fix a leak in the Apple Remote class. A thank you to the Xbmc authors who had this fixed in their version of Martin Kahr's class. (cherry picked from commit 7157ad33673305f7947fe84ca78374bdba5e64f8) Signed-off-by: Jean-Baptiste Kempf --- modules/gui/macosx/AppleRemote.h | 1 + modules/gui/macosx/AppleRemote.m | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/gui/macosx/AppleRemote.h b/modules/gui/macosx/AppleRemote.h index 28dce49d4f..8a34b9539a 100644 --- a/modules/gui/macosx/AppleRemote.h +++ b/modules/gui/macosx/AppleRemote.h @@ -86,6 +86,7 @@ The class is not thread safe IOHIDQueueInterface** queue; NSMutableArray* allCookies; NSMutableDictionary* cookieToButtonMapping; + CFRunLoopSourceRef eventSource; BOOL openInExclusiveMode; BOOL simulatePlusMinusHold; diff --git a/modules/gui/macosx/AppleRemote.m b/modules/gui/macosx/AppleRemote.m index 2440120553..9790de2aa3 100644 --- a/modules/gui/macosx/AppleRemote.m +++ b/modules/gui/macosx/AppleRemote.m @@ -231,6 +231,11 @@ cleanup: } - (IBAction) stopListening: (id) sender { + if (eventSource != NULL) { + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), eventSource, kCFRunLoopDefaultMode); + CFRelease(eventSource); + eventSource = NULL; + } if (queue != NULL) { (*queue)->stop(queue); @@ -619,7 +624,6 @@ static void QueueCallbackFunction(void* target, IOReturn result, void* refcon, } // add callback for async events - CFRunLoopSourceRef eventSource; ioReturnValue = (*queue)->createAsyncEventSource(queue, &eventSource); if (ioReturnValue == KERN_SUCCESS) { ioReturnValue = (*queue)->setEventCallout(queue,QueueCallbackFunction, self, NULL);