From b765f1fe83a0df149ad783f7dae8ea01f71e680d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Wed, 11 Jun 2014 19:57:51 +0200 Subject: [PATCH] Fix memory leaks * macfont.m (macfont_draw): positions where not freed. * nsterm.h (EmacsApp): Always compile in shouldKeepRunning, isFirst on Cocoa. * nsterm.m (run): Always compile for Cocoa. Use runtime check to determine 10.9. Fixes: debbugs:17751 --- src/ChangeLog | 10 ++++++++++ src/macfont.m | 1 + src/nsterm.h | 2 +- src/nsterm.m | 52 ++++++++++++++++++++++++++++++--------------------- 4 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 5fec848154b..6733cf176ca 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2014-06-11 Jan Djärv + + * nsterm.h (EmacsApp): Always compile in shouldKeepRunning, isFirst + on Cocoa. + + * nsterm.m (run): Always compile for Cocoa. Use runtime check to + determine 10.9 (Bug#17751). + + * macfont.m (macfont_draw): positions where not freed. + 2014-06-10 Dmitry Antipov * dispextern.h (PREPARE_FACE_FOR_DISPLAY): Remove as a duplicate of ... diff --git a/src/macfont.m b/src/macfont.m index d34e0332236..9b3cb2c29f6 100644 --- a/src/macfont.m +++ b/src/macfont.m @@ -2810,6 +2810,7 @@ macfont_draw (struct glyph_string *s, int from, int to, int x, int y, xfree (glyphs); + xfree (positions); CGContextRestoreGState (context); unblock_input (); diff --git a/src/nsterm.h b/src/nsterm.h index d2c42c553d9..e77aca3d50d 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -100,7 +100,7 @@ typedef float EmacsCGFloat; /* We override sendEvent: as a means to stop/start the event loop */ @interface EmacsApp : NSApplication { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 +#ifdef NS_IMPL_COCOA BOOL shouldKeepRunning; BOOL isFirst; #endif diff --git a/src/nsterm.m b/src/nsterm.m index 6b617be4c0d..c6450804f57 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -4453,7 +4453,7 @@ ns_term_shutdown (int sig) { if (self = [super init]) { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 +#ifdef NS_IMPL_COCOA self->isFirst = YES; #endif #ifdef NS_IMPL_GNUSTEP @@ -4464,30 +4464,40 @@ ns_term_shutdown (int sig) return self; } -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 +#ifdef NS_IMPL_COCOA - (void)run { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; +#ifndef NSAppKitVersionNumber10_8 +#define NSAppKitVersionNumber10_8 1187 +#endif - if (isFirst) [self finishLaunching]; - isFirst = NO; + if (NSAppKitVersionNumber <= NSAppKitVersionNumber10_8) + { + [super run]; + return; + } - shouldKeepRunning = YES; - do - { - [pool release]; - pool = [[NSAutoreleasePool alloc] init]; - - NSEvent *event = - [self nextEventMatchingMask:NSAnyEventMask - untilDate:[NSDate distantFuture] - inMode:NSDefaultRunLoopMode - dequeue:YES]; - [self sendEvent:event]; - [self updateWindows]; - } while (shouldKeepRunning); + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [pool release]; + if (isFirst) [self finishLaunching]; + isFirst = NO; + + shouldKeepRunning = YES; + do + { + [pool release]; + pool = [[NSAutoreleasePool alloc] init]; + + NSEvent *event = + [self nextEventMatchingMask:NSAnyEventMask + untilDate:[NSDate distantFuture] + inMode:NSDefaultRunLoopMode + dequeue:YES]; + [self sendEvent:event]; + [self updateWindows]; + } while (shouldKeepRunning); + + [pool release]; } - (void)stop: (id)sender @@ -4497,7 +4507,7 @@ ns_term_shutdown (int sig) // The file dialog still leaks 7k - 10k on 10.9 though. [super stop:sender]; } -#endif +#endif /* NS_IMPL_COCOA */ - (void)logNotification: (NSNotification *)notification { -- 2.39.5