summaryrefslogtreecommitdiffstats
path: root/base/message_pump_mac.mm
diff options
context:
space:
mode:
authormark@chromium.org <mark@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-25 20:33:42 +0000
committermark@chromium.org <mark@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-25 20:33:42 +0000
commit89836e2574a390828deb9bf86f0d169f7aacfd39 (patch)
treed41fc75cbd5d348051cf66fe12a2bf0c8f9987d4 /base/message_pump_mac.mm
parent1a8f5d1d016723fb1fcc49b1fc5290fa1b7f2706 (diff)
downloadchromium_src-89836e2574a390828deb9bf86f0d169f7aacfd39.zip
chromium_src-89836e2574a390828deb9bf86f0d169f7aacfd39.tar.gz
chromium_src-89836e2574a390828deb9bf86f0d169f7aacfd39.tar.bz2
Provide autorelease pool management on the Mac in all types of message pumps.
Fix a few unit tests to use autorelease pools as needed. Review URL: http://codereview.chromium.org/3805 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2603 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_pump_mac.mm')
-rw-r--r--base/message_pump_mac.mm13
1 files changed, 10 insertions, 3 deletions
diff --git a/base/message_pump_mac.mm b/base/message_pump_mac.mm
index 495f828..1a8f7b5 100644
--- a/base/message_pump_mac.mm
+++ b/base/message_pump_mac.mm
@@ -8,6 +8,8 @@
#import <Foundation/Foundation.h>
#include <float.h>
+#include "base/scoped_nsautorelease_pool.h"
+
namespace {
void NoOp(void* info) {
@@ -216,7 +218,13 @@ void MessagePumpCFRunLoop::DoRun(Delegate* delegate) {
int last_innermost_quittable = innermost_quittable_;
innermost_quittable_ = nesting_level_ + 1;
- CFRunLoopRun();
+ // This is completely identical to calling CFRunLoopRun(), except autorelease
+ // pool management is introduced.
+ int result;
+ do {
+ ScopedNSAutoreleasePool autorelease_pool;
+ result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, DBL_MAX, false);
+ } while (result != kCFRunLoopRunStopped && result != kCFRunLoopRunFinished);
// Restore the previous state of the object.
innermost_quittable_ = last_innermost_quittable;
@@ -315,7 +323,7 @@ void MessagePumpNSApplication::DoRun(Delegate* delegate) {
} else {
running_own_loop_ = true;
while (keep_running_) {
- NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init];
+ ScopedNSAutoreleasePool autorelease_pool;
NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
@@ -323,7 +331,6 @@ void MessagePumpNSApplication::DoRun(Delegate* delegate) {
if (event) {
[NSApp sendEvent:event];
}
- [autorelease_pool drain];
}
keep_running_ = true;
}