Fixed bug #1027
Vittorio Giovara 2010-07-17 19:21:36 PDT
fix the double free error
in SDL_uikitview the variable 'textfield' is initialialized and set to
autorelease.
however in the dealloc method a second [release] is sent.
If the textfield has not been set to nil before (with a viewDidUnload for
example) this can lead to awful hard-to-find crashes when the SDL code
terminates.
the error message is
-[textfield release] message sent to deallocated instance 0x4e5fa90
the fix is simple, just release the object as soon as it is added to the
subview, see attached patch
--- a/src/video/uikit/SDL_uikitview.m Wed Jan 19 22:55:51 2011 -0800
+++ b/src/video/uikit/SDL_uikitview.m Wed Jan 19 23:45:29 2011 -0800
@@ -35,9 +35,6 @@
@implementation SDL_uikitview
- (void)dealloc {
-#if SDL_IPHONE_KEYBOARD
- [textField release];
-#endif
[super dealloc];
}
@@ -220,7 +217,7 @@
/* Set ourselves up as a UITextFieldDelegate */
- (void)initializeKeyboard {
- textField = [[[UITextField alloc] initWithFrame: CGRectZero] autorelease];
+ textField = [[UITextField alloc] initWithFrame: CGRectZero];
textField.delegate = self;
/* placeholder so there is something to delete! */
textField.text = @" ";
@@ -238,6 +235,7 @@
keyboardVisible = NO;
/* add the UITextField (hidden) to our view */
[self addSubview: textField];
+ [textField release];
}
/* reveal onscreen virtual keyboard */